Java Swing - Как получить доступ к JComponent одного JPanel из другого JPanel, оба добавлены в JFrame? - PullRequest
1 голос
/ 26 апреля 2010

Я разрабатываю настольное приложение Java с графическим интерфейсом, реализованным в SWING.

У меня есть JFrame. Я добавил три JPanel с этим. Один JPanel panel1 имеет кнопку запуска. Теперь я хочу отключить различные компоненты на других JPanels, когда пользователь нажимает кнопку запуска на панели1.

Теперь, как я могу получить доступ к компонентам этих других панелей из панели 1.

Я знаю, что один из подходов - сначала получить контейнер panel1

.
panel1.getParent();

Тогда получите компоненты контейнера

container.getComponents();

и используйте их по необходимости.

Q1. Есть ли другой способ, которым я могу выполнить ту же задачу? (Я думаю, что это единственный путь)

Q2. После получения списка компонентов контейнера, как отличить один контейнер от другого?

Ответы [ 4 ]

1 голос
/ 26 апреля 2010

Вы можете создавать переменные экземпляра, которые ссылаются на панели при их создании, и использовать эти переменные для ссылки на панели.

public class myFrame extends JFrame {
   public static JPanel buttonPanel;
   public static JPanel statusPanel;

   public static void main(String[] args) {
      buttonPanel = new JPanel();   
   }
}
1 голос
/ 26 апреля 2010

Возможно, у меня есть отдельный слой приложения - тот, который содержит ссылки на различные панели и кнопку запуска - обрабатывает это действие. Таким образом, когда кнопка запуска нажата, она вызывает метод для некоторого объекта Controller; объект Controller, имеющий ссылки на другие JPanel s, отключает другие компоненты.

1 голос
/ 26 апреля 2010

Я бы добавил ActionListener извне к кнопке Пуск:

StartPanel panel1 = ...
JPanel panel2 = ....

panel1.getStartButton().addActionListener(new ActionListener() { 
  public void actionPerformed(ActionEvent e) {
    setEnabledTree(panel2, false); 
  }
}
0 голосов
/ 26 апреля 2010

Я бы передавал ссылки на другие панели в панель с помощью кнопки «Пуск». Или просто есть метод в контейнере, который делает именно то, что вы хотите, и вызовите его.

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