2011-12-06 116 views
0

我對Java非常陌生,我正在爲編寫凱撒移位密碼解碼器設置自己的挑戰。我基本上試圖從另一個類中清除JTextArea。我有兩個類,一個叫做CrackerGUI的GUI類和一個班級。該JTextArea是在GUI類用下面的方法沿着:從另一個類中清除JTextArea

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

的GUI類也具有與以下清除按鈕:

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。

這將要求父類也是靜態的,這可能會導致您的某些方法出錯,只是擡頭。

要不,你可以創建自己的setText方法:

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

,可能使您能夠在當前的GUI直接編輯組件。

+1

號不要把嬰兒扔到洗澡水裏 - 不要用靜態*任何東西來拋棄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面向對象的東西的好處。 – 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實例的文本區域。這就好像你想通過一張新的空白紙清理一張紙來清除圖紙。原始的一張紙將保持其圖紙。

您需要的GUI實例傳遞給你的轉移:

public class Shift { 
    private CrackerGUI gui; 

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

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

,並在CrackerGUI類:

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

偉大的思想認爲一樣。 1+ –

相關問題