Обновить панель на своп CardLayout - PullRequest
3 голосов
/ 30 июля 2010

Как обновить JPanel при смене панели из контейнера CardLayout?

Ответы [ 4 ]

2 голосов
/ 30 июля 2010

Используйте метод show(). Из API Java:

Переход на компонент, который был добавлен в этот макет с указанным именем, с использованием addLayoutComponent. Если такого компонента не существует, то ничего не происходит.

CardLayout#first(), next() и previous() делают нечто подобное.

Иногда, когда я делал такой обмен панелями (хотя я не могу вспомнить на CardLayout, но прошло уже много времени с тех пор, как я его использовал), мне также приходилось упаковывать кадр снова. Если это не сработает, вы можете позвонить revalidate(), что даст Swing понять, что компонент необходимо перерисовать.

Вы также можете рассмотреть возможность использования панели с вкладками , так как она делает многое для вас; Я начал проект, пытаясь использовать CardLayout и решил вместо этого использовать панель с вкладками. Конечно, зависит от того, что вы хотите сделать.

1 голос
/ 30 июля 2010

Есть ли список действий или что-то, что я могу заставить его перезагрузить / обновить мои данные на этом экране?

Предполагая, что у вас есть модель, которая предоставляет данные для вашего представления (панели), распространены два подхода:

  1. Организовать для вашей модели расширение Observable и ваш взгляд на регистрацию в качестве Observer.

  2. Организовать для вашей модели управление EventListenerList, фактически создав собственный аналог ActionEvent.

В любом подходе используйте прослушиватель элемента управления, который переключает представления, чтобы сообщить модели обновить свои зарегистрированные наблюдатели / слушатели. Пример в Как использовать CardLayout использует JComboBox и itemStateChanged(). Здесь есть дополнительное обсуждение .

0 голосов
/ 30 июля 2010

Есть ли список действий или то, что я могу иметь это перезагрузить / обновить мои данные на этом экране?

Вы можете использовать AncestorListener. Он срабатывает, когда компонент добавляется в контейнер. Поэтому, когда вы меняете карты, происходит событие. Вам нужно будет добавить слушателя на каждую панель, которую вы добавляете в CardLayout:

Другая проблема, связанная с CardLayout, заключается в том, что панель не получает фокус при переключении. Я использую этот подход, чтобы установить фокус на панели. Проверьте Карта Макет Фокус .

panel.addAncestorListener(...);
0 голосов
/ 30 июля 2010

Метод show () позволяет переключать панели, но не «обновляет» данные. Есть ли список действий или что-то, что я могу сделать так, чтобы он перезагрузил / обновил мои данные на этом экране?

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