我有一个带有一些变量和一些SWING小部件的JFrame应用程序。在其中我创建了另一个类的实例,并将JFrame传递给构造函数中的子节点。从孩子那里,我可以引用变量,但不能引用小部件。为什么呢?
// My JFrame
public class Prot2Prom extends JFrame {
// My Child
public Prot2Prom() {
super( "Protocol To PROM" );
Child child = new Child(this);
在Child类中,我的构造函数
Prot2Prom frame = null;
public Child(Prot2Prom gui) {
frame = gui;
}
以下作品:
frame.<parent variable>=x;
以下内容不是:
frame.textArea.append("Hello");
无法解析textArea。全都添加了“新”。为什么我不能看到它们?
答案 0 :(得分:3)
一些注意事项和建议:
textArea
不是Prot2Prom类的 public 字段。 编辑1
关于你的评论:
“小部件”全部由WindowsBuilder Pro创建。我正在尝试使用textArea为独立(jar)应用程序创建我的Eclipse控制台。如何从Frame实例化的类中打印到它?
您需要为包含textArea变量的类提供一个公共方法:
public void appendTextAreaText(String text) {
textArea.append(text);
}
然后您的其他类可以将文本附加到JTextArea。为什么这很重要?一个原因是,如果持有textArea的类在某些时候不希望允许其他类附加到此窗口小部件的能力,则它可以具有在该方法中控制它的逻辑。因此,它可以更好地控制小部件到拥有它的类。
例如,
public void appendTextAreaText(String text) {
if (allowTextAreaAppend) { // a class boolean field
textArea.append(text);
}
}
顺便说一下,我还建议您将代码生成工具放在一边,然后手动创建Swing GUI,直到您牢牢掌握Swing和Java基础知识。这将使您将来更好地使用Swing代码生成工具。
答案 1 :(得分:2)
textArea无法解析
此消息表明textArea
中没有名为Prot2Prom
的成员类变量。这可能是一个错字。也许变量称为textarea
或仅在构造函数范围内本地定义。
上课时看起来像这样
public class Prot2Prom extends JFrame {
JTextArea textArea = new JTextArea();
...
更新父组件中文本的更好方法是创建Prot2Prom
方法,如下所示:
public void addText(String text) {
textArea.append(text);
}
这可以更好地控制文本添加到JTextArea
的方式。