[英]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.