2011-12-06 2 views
0

저는 Java에 익숙하지 않습니다. 저는 시저 전환 코드 디코더를 작성하는 데 어려움을 겪고 있습니다. 기본적으로 다른 클래스에서 JTextArea를 삭제하려고합니다. 두 클래스, CrackerGUI라는 GUI 클래스와 교대 클래스가 있습니다. JTextArea에는 다음과 같은 방법과 함께 GUI 클래스에 있습니다다른 클래스에서 JTextArea 지우기

public void setPlainTextBox(String text) 
{ 
    plainTextBox.setText(text); 
} 

그래픽 사용자 인터페이스 클래스는 또한 다음과 클리어 버튼이 있습니다

private void btnClearActionPerformed(java.awt.event.ActionEvent evt) {           
    Shift classShift = new Shift(); 
    classShift.btnClear(); 
} 

가 마지막으로 내가 취소 시프트 클래스의 메소드가를 JTextArea.

public class Shift extends CrackerGUI { 

public void btnClear() 
{ 
    CrackerGUI gui = new CrackerGUI(); 
    gui.setPlainText(" "); 
    System.out.println("testing"); 
} 
} 

테스트 텍스트가 콘솔로 인쇄되고 있지만 JTextArea는 분명하지 않습니다. 나는 왜 그런지 확신하지 못합니다. 나는 그것이 매우 단순한 실수라고 확신하지만 그것은 당황 스럽다. 어떤 도움을 주시면 감사하겠습니다.

미리 감사드립니다.

답변

-2

새로운 GUI를 생성하고 이미 표시된 현재 GUI 대신에 GUI를 표시하면 정적 메서드를 사용해 볼 수 있습니다.

이렇게하면 상위 클래스도 정적이어야하므로 일부 메소드에서 오류가 발생할 수 있습니다. 직접 현재의 GUI의 구성 요소를 편집 할 수 있습니다

void setText(JTextField t, String s){ 
    t.setText(s); 
} 

:

아니면, 당신은 당신의 자신의 setText 메소드를 만들 수 있습니다.

+1

번호

당신은 당신의 시프트에 GUI 인스턴스를 전달해야목욕물에 아기를 던지지 마십시오. OOP 기술을 사용하여 훨씬 쉽게 해결할 수있는이 문제를 해결하기 위해 정적 인 것을 사용하여 OOP 프로그래밍을 버리지 마십시오. –

+0

내가 대체물이 있다고 말했을 때 거시기가 될 필요는 없다. – Matt

+0

@ Firexranger8 : 정적 솔루션이 좋지 않습니다. 또한, 내부 클래스를 제외하고는 Java에 정적 클래스가 없습니다. 그리고 당신의 대안은 전혀 말이되지 않습니다. 아, 그리고 당신도 무례 해요. –

3

상속을 포함하지 않는 문제를 해결하기 위해 상속을 잘못 사용하고 있습니다. Shift 키를 눌러 CrackerGUI를 확장하지 말고 btnClear() 메서드 안에 새 CrackerGUI 객체를 만들지 마십시오. CrackerGUi도 표시되어 있지 않으므로. 대신 Shift 키를 눌러 표시된 CrackerGUI 객체에 대한 참조를 잡고이 객체의 공용 메소드를 호출하게하십시오. 예를 들어,

,

public class Shift { 
    private CrackerGUI gui; 

    // pass in a reference to the displayed CrackerGUI object 
    public Shift(CrackerGUI gui) { 
    this.gui = gui; 
    } 

    public void btnClear() { 
    //CrackerGUI gui = new CrackerGUI(); 
    gui.setPlainText(" "); 
    System.out.println("testing"); 
    } 
} 

당신은 또한 당신의 GUI의의 actionPerformed 방법의 새로운 시프트 개체를 만들 수 아마해야하지만, 오히려 클래스 필드 하나만 시프트 객체를 사용합니다.

+0

+1 OOP에 관한 좋은 점. – GETah

+0

위대한 마음은 똑같이 생각합니다. 1+ –

0

CrackerGUI 당신의 GUI입니다 가정, 당신은 대신 다음이 있어야합니다

public class CrackerGUI { 

    public void setPlainTextBox(String text) 
    { 
    plainTextBox.setText(text); 
    } 
    public void btnClear() 
    { 
    setPlainTextBox(""); 
    System.out.println("testing"); 
    } 
} 

마지막 일을, 당신의 GUI 요소는 공개되지 않습니다! GUI를 지우고 내부에 숨겨진 요소 지우기에 대한 지식을 남겨 두어야합니다.

+0

왜 Shift를 클릭하면 CrackerGUI가 확장됩니까? –

+0

@HovercraftFullOfEels 죄송합니다. 실제로 GUI 자체를 확장 할 필요가 전혀없는 작은 실수였습니다. – GETah

3

btnClear 메서드는 새 CrackerGUI 인스턴스의 텍스트 영역을 지 웁니다. 새 빈 시트를 가져 와서 지워서 한 장의 그림을 지우고 싶을 때와 같습니다. 원래의 종이는 그 그림을 유지할 것입니다. CrackerGUI 클래스

public class Shift { 
    private CrackerGUI gui; 

    public Shift(CrackerGUI gui) { 
     this.gui = gui; 
    } 

    public void btnClear() { 
     this.gui.setPlainText(" "); 
    } 
} 

과에 :

private void btnClearActionPerformed(java.awt.event.ActionEvent evt) {           
    Shift classShift = new Shift(this); 
    classShift.btnClear(); 
} 
+0

위대한 마음이 비슷하다고 생각합니다. 1+ –