我有两个班级,
主要
子
在主要课程中,我有一个按钮和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");
}
答案 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之间的调用中解决了我的问题!