簡體   English   中英

從另一個類清除JTextArea

[英]Clearing a JTextArea from another class

我對Java還是很陌生,因此在編寫Caesar移位密碼解碼器方面面臨挑戰。 我基本上是想從另一個類中清除JTextArea。 我有兩個類,一個稱為CrackerGUI的GUI類和一個shift類。 JtextArea與以下方法一起位於GUI類中:

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

GUI類還具有一個帶有以下內容的清除按鈕:

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

最后,我在shift類中具有清除JTextArea的方法。

public class Shift extends CrackerGUI {

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

測試文本正在打印到控制台,但JTextArea無法清除。 我不確定為什么:)。 我敢肯定這是一個非常簡單的錯誤,但這使我感到困惑。 任何幫助,將不勝感激。

先感謝您。

您正在濫用繼承來解決不涉及繼承的問題。 不要使用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方法中創建新的Shift對象,而應該僅使用一個作為類字段的Shift對象。

btnClear方法清除新的CrackerGUI實例的文本區域。 這就像您要通過取出新的空白紙並清除它來清除一張紙上的圖形。 原始紙張將保留其圖紙。

您需要將gui實例傳遞給Shift:

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(); 
}   

假設CrackerGUI是您的GUI,則應改為以下內容:

public class CrackerGUI {

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

最后一件事,永遠不要公開您的GUI元素! 您應該要求GUI清除自身,並將清除元素的知識隱藏在其中。

您可以嘗試使用靜態方法,因為最終將創建一個新的gui,然后顯示該gui,而不是已經顯示的當前gui。

這也將要求父類也是靜態的,這可能會導致某些方法出錯,請注意。

否則,您可以創建自己的setText方法:

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

這可能使您可以直接在當前GUI中編輯組件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM