2012-11-28 4 views
1

GUI 클래스 (JButton이 GUI 클래스에서 호출)에 두 개의 GUI GUI (주 JFrame을 렌더)와 인쇄 클래스가 있습니다. 이제 내 GUI 클래스에 내가 가지고 JTextArea에 및 방법 :정적이 아닌 변수를 할당하는 정적 메서드

void setOutput(String data) 
{ 
    // output is JTextArea 
    output.setText(data); 
} 

데이터가 난 액션 청취자와의 JButton을 가지고있는 인쇄 JFrame의를 제공하지만 :

sizOpt.addActionListener(new ActionListener() 
{  
    @Override 
    public void actionPerformed(ActionEvent event) 
    { 
     // textfield is a JTextField component 
     String data = textfield.getText(); 


     // My problem is here i need to invoke the setOutput 
     // method in GUI to output the string however i cant call that method in 
     // any way but making it static or calling new GUI which will create a new 
     // Instance of GUI class 
     GUI.setOutput(data); 
    } 
}); 
+2

그래서 ... 질문이 뭐니? Ah OK 죄송합니다. 실제로 코드 샘플의 주석에 실제 질문을 넣어서는 안됩니다. –

+0

죄송합니다. 오전 5시에 눈이 피로 해지고 내 마음이 깨지기 시작합니다. –

답변

2

대답을 :하지 여기서 정적 인 것을 사용하십시오.

고정적이어야하는 유일한 방법은 기본 방법이며, 아마도 그럴 것입니다. GUI에서 메소드를 호출해야하는 경우 정적 메소드가 아닌 시각화 된 GUI의 인스턴스에서 호출하십시오. 까다로운 부분은 유효한 참조를 얻는 경우가 많으며 새로운 GUI 객체를 만들지 않아도되지만 작동하지 않는 정적 솔루션을 다시 시도하지 않아야합니다. 유효한 참조를 얻는 몇 가지 방법은 생성자 매개 변수 또는 설정 메서드를 사용하는 것입니다.

즉,

public class PrintJFrame extends JFrame { 
    private GUI gui; 

    public PrintJFrame(GUI gui) { 
    this.gui = gui; 
    } 

    // ... 
} 

지금 당신의 ActionListener에 당신은 GUI 변수가 보유 올바른 GUI 참조에 대한 메소드를 호출 할 수 있습니다. 다음으로, 클래스가 JFrames와 비슷한 GUI 컴포넌트를 확장하지 않도록해야하는 이유에 대해 설명하겠습니다. 다음 '

+0

내가 가지고 있었던 것은 내가 class class 산물 GUI라고 불렀던 분리 된 클래스에 있었던 나의 주된 방법이었다 g. 그리고 메인에서 나는 g = 새로운 GUI(); 그럼 내가 g.setOutput (데이터)라는 정적 메서드 참조 (문자열 데이터); 내 인쇄 수업에서 main class.reference라고 불렀습니다. 그러나 나는 당신의 접근 방식이 훨씬 더 좋아서 메신저가 많은 작업을하지 않고 다시 작성하여 더 잘 작동하게 될 것입니다. –

+0

@kellax : 도움이 되니 기쁩니다! –

1

JFrame의 적절한 인스턴스 메소드를 사용하여 JFrame 서브 클래스의 인스턴스에 대한 정적 참조를 작성하여 텍스트를 검색하십시오.

+0

다른 클래스의 비 정적 인스턴스에서 적절한 메소드를 호출하는 것이 더 좋지 않겠습니까? –

+0

코드에 최소한의 변경을 제안하려고했지만 JFrame에 대한 정적 참조 만 만드는 것은 그리 많은 노력이 아닐 것이라고 생각했습니다. 대답으로 수정했습니다. –

관련 문제