Java - вызов метода объекта, не входящего в область видимости (родительские дочерние элементы) - PullRequest
1 голос
/ 22 апреля 2011

Возможно, об этом уже много раз спрашивали, или я не знаю, что искать, чтобы получить ответ. У меня есть JFrame, который загружается в несколько JPanels. В чем я испытываю затруднения, так это в обновлении содержимого одного JPanel из другого. Скажем, у меня есть следующее:

JFrame1.JPanel1.JButtonA
JFrame1.JPanel2.JButtonB

Когда нажимается JButtonA, я хочу, чтобы текст JButtonB был изменен. Конечно, это не то, что я хочу сделать, а простой пример того, чего я хотел бы достичь. Куда я иду не так? Как получить ссылку на объект, не делая все одноэлементным?

1 Ответ

3 голосов
/ 22 апреля 2011

Самый простой способ - это, конечно, вспомнить ссылку на 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 (например, игра в паузу ).Затем создайте интерфейс PauzeGameEventListener, реализованный JPanel2 (например, шахматная доска ), и заставьте JPanel1 (например, панель управления игрой ) запустить PauzeGameEvent для всех слушателей.Таким образом, когда ваш JPanel3 (например, панель с оценками ) или материал, не относящийся к графическому интерфейсу (например, AI player ), также должен знать об этом, вы не засоряетеКод JPanel1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...