之前可能已经多次询问或者我不知道要搜索什么来获得答案。我得到的是一个加载在几个JPanels中的JFrame。我遇到的困难是从一个JPanel更新另一个JPanel的内容。所以说我有以下内容:
JFrame1.JPanel1.JButtonA
JFrame1.JPanel2.JButtonB
当按下JButtonA时,我希望JButtonB更改其文本。当然,这不是我想做的,而是我想要实现的一个简单例子。我哪里错了?如何在不使所有东西成为单身的情况下获得对象的引用?
答案 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代码。