这可能在以前已经被问过很多次了,或者我不知道要寻找什么才能得到答案。我得到的是一个在多个JPanel中加载的JFrame。我遇到的困难是从一个JPanel更新另一个JPanel的内容。所以说我有以下几点:
JFrame1.JPanel1.JButtonA
JFrame1.JPanel2.JButtonB
当按下JButtonA时,我希望JButtonB更改其文本。当然,这不是我想要做的,而是我想要实现的简单示例。我要去哪里错了?如何在不使所有内容成为单例的情况下获得对对象的引用?
最佳答案
最简单的方法当然是在构造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的真正含义(例如纱布游戏)。然后创建一个由JPanel2(例如棋盘)实现的
PauzeGameEventListener
接口,并使JPanel1(例如游戏控制面板)向所有侦听器发射一个PauzeGameEvent
。这样,当您的JPanel3(例如,乐谱面板)或非GUI内容(例如,AI播放器)也需要意识到这一点时,您就不会乱扔JPanel1代码。