从另一个类更新jtextarea

时间:2012-09-10 20:36:42

标签: java swing

我有两个班级,

  1. 主要

  2. 在主要课程中,我有一个按钮和jtextarea

    在Sub类中,我有一个按钮

    当我点击主类中的按钮时,Sub类会运行并显示一个按钮。当我按下Sub类中的按钮时,jtextarea应该显示值“Sample text”,但是jtextarea没有显示任何文本。

    子类代码,

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        Main main = new Main();
        main.jTextArea1.setText("Sample text");
    }
    

2 个答案:

答案 0 :(得分:4)

你不应该使用新的Main,然后你得到一个不同的对象(可能没有设置为可见),并且不会显示任何内容。你需要做的是为你的Main对象(正在显示的对象)创建一个局部变量,以及在Sub中创建一个构造函数,如下所示:

private Main main;
public Sub(final Main main) {
    this.main = main();
}

然后,当您从Main实例化Sub时:

final Sub sub = new Sub(this);

然后你在Sub的行动可以说:

main.jTextArea1.setText("Sample text")

甚至更好:

main.getjTextArea1().setText("Sample text");

你应该始终保持变量的私有性,并使用方法来操作它们,getter和setter,或其他东西。例如,您可以这样做:

main.displayText("Sample text");

这样,Sub就不需要了解Mains文本区域,这是一件好事。

答案 1 :(得分:0)

至于main引用是一个对象而不是类本身,它应该工作!但是,您应检查jTextArea1是公开还是私有。如果私有使getTextArea()方法返回textarea并调用方法(通常这是一个更好的主意)。如果从sub class调用main class而主要是parent尝试获取rootPane(例如,sub是JDialog)。尝试在外部(在另一个类中)创建一个主窗口,看看它是如何进行的。这在不同帧和Dialogs之间的调用中解决了我的问题!