0

我有两节课,

  1. 主要的

在主类中,我有一个按钮和 jtextarea

在子类中,我有一个按钮

当我单击主类中的按钮时,子类运行并显示一个按钮。当我按下子类中的按钮时,jtextarea 应该显示值“示例文本”,但 jtextarea 没有显示任何文本。

子类代码,

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

2 回答 2

4

您不应该新建 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 文本区域的任何信息,这是一件好事。

于 2012-09-10T20:42:49.720 回答
0

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

于 2012-09-10T20:42:45.547 回答