这可能在以前已经被问过很多次了,或者我不知道要寻找什么才能得到答案。我得到的是一个在多个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代码。

10-04 18:15