Java - 调用不在范围内的对象的方法(父级的子级)

时间:2011-04-22 07:25:40

标签: java swing scope

之前可能已经多次询问或者我不知道要搜索什么来获得答案。我得到的是一个加载在几个JPanels中的JFrame。我遇到的困难是从一个JPanel更新另一个JPanel的内容。所以说我有以下内容:

JFrame1.JPanel1.JButtonA
JFrame1.JPanel2.JButtonB

当按下JButtonA时,我希望JButtonB更改其文本。当然,这不是我想做的,而是我想要实现的一个简单例子。我哪里错了?如何在不使所有东西成为单身的情况下获得对象的引用?

1 个答案:

答案 0 :(得分:3)

最简单的方法当然是在构建JFrame1时记住对JPanel1的引用:

JPanel1 p1 = new JPanel1(this);

并记住并在JPanel1中使用它:

public JPanel1(JFrame1 f1) {
    this.f1 = f1;
}
...
public void actionPerformend(...) {
    f1.getPanel2().getButtonB().setText("A is pressed");
}

那是不好的

相反,想想点击A真正意味着什么(例如 pauze game )。然后创建一个由JPanel2实现的PauzeGameEventListener接口(例如棋盘)并使JPanel1(例如游戏控制面板)触发{{1}对所有听众。这样,当你的JPanel3(例如得分面板)或非gui的东西(例如 AI播放器)也需要意识到这一点时,你不是乱丢JPanel1代码。