Java 从另一个类中清除JTextArea

Java 从另一个类中清除JTextArea,java,swing,inheritance,jtextarea,Java,Swing,Inheritance,Jtextarea,我对Java非常陌生,我正在给自己设置编写Caesar移位密码解码器的挑战。我基本上是想从另一个类中清除一个JTextArea。我有两个类,一个叫做CrackerGUI的GUI类和一个shift类。JtextArea与以下方法一起位于GUI类中: public void setPlainTextBox(String text) { plainTextBox.setText(text); } GUI类还有一个带有以下内容的清除按钮: private void btnClearAction

我对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无法清除。我不知道为什么:)。我确信这是一个非常简单的错误,但它让我困惑不解。任何帮助都将不胜感激


提前感谢。

您可以尝试使用静态方法,因为您最终会创建一个新的gui,然后显示该gui,而不是当前已显示的gui

这将要求父类也是静态的,这可能会导致某些方法出错,只是一个提示

或者,您可以创建自己的setText方法:

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

这可能使您能够直接编辑当前GUI中的组件。

您可以尝试使用静态方法,因为最终会创建一个新的GUI,然后显示该GUI,而不是当前已显示的GUI

这将要求父类也是静态的,这可能会导致某些方法出错,只是一个提示

或者,您可以创建自己的setText方法:

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

这可能使您能够直接编辑当前GUI中的组件。

您误用继承来解决不涉及继承的问题。不要使用Shift extend CrackerGUI,也不要在btnClear()方法内创建新的CrackerGUI对象,因为两个CrackerGUI都不是显示的对象。相反,让Shift键保持对显示的CrackerGUI对象的引用,并让它调用此对象的公共方法

e、 g

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对象。

您误用继承来解决一个不涉及继承的问题。不要使用Shift extend CrackerGUI,也不要在btnClear()方法内创建新的CrackerGUI对象,因为两个CrackerGUI都不是显示的对象。相反,让Shift键保持对显示的CrackerGUI对象的引用,并让它调用此对象的公共方法

e、 g

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对象。

假设CrackerGUI是您的GUI,您应该具有以下内容:

public class CrackerGUI {

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

最后一件事,永远不要公开您的GUI元素!您应该要求GUI自行清除,并将清除元素的知识隐藏在其中。

假设CrackerGUI是您的GUI,您应该具有以下内容:

public class CrackerGUI {

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

最后一件事,永远不要公开您的GUI元素!您应该要求GUI自行清除,并将清除元素的知识隐藏在其中。

btnClear方法清除新GUI实例的文本区域。这就像你想要清除一张纸上的一张画,你需要一张新的空白纸,然后清除它。原纸将保留其图纸

您需要将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(); 
}   

btnClear方法清除新GUI实例的文本区域。这就像你想要清除一张纸上的一张画,你需要一张新的空白纸,然后清除它。原纸将保留其图纸

您需要将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(); 
}   

不。不要把孩子和洗澡水一起扔掉——不要为了解决这个问题而使用静态任何东西来扔掉OOP编程的好处,这个问题可以通过OOP技术更容易地解决。我甚至说有替代方案时,你也不必像个傻瓜。@Firexranger8:你的静态解决方案很糟糕。此外,除了内部类,Java中没有静态类。你的选择毫无意义。哦,你也不礼貌,不。不要把孩子和洗澡水一起扔掉——不要为了解决这个问题而使用静态任何东西来扔掉OOP编程的好处,这个问题可以更容易地通过OOP技术来解决。当我甚至说有替代方案时,你也不必是个混蛋。@Firexranger8:你的静态解决方案很糟糕。此外,除了内部类,Java中没有静态类。你的选择毫无意义。哦,你也很不礼貌。为什么要让Shift扩展CrackerGUI?@HovercraftFullOfEels-Oops!这是一个小错误,实际上不需要扩展GUI本身为什么要使用Shift扩展CrackerGUI?@HovercraftFullOfEels-Oops!这是一个小错误,实际上没有必要扩展GUI本身