Перестановочные панели CardLayout - PullRequest
0 голосов
/ 24 февраля 2010

В моем проекте у меня есть JPanel (bottomPanel) в JFrame, который нужно поменять местами, поэтому я использую CardLayout на bottomPanel.

В моем родительском JFrame я, по сути, получил этот код в методе (setBottomPanel):

bottom.add(p.toString(),p);
bottomLayout.show(bottom, p.toString());

И я вызываю его один раз в родительском конструкторе JFrame, и он отлично работает. Тем не менее, я передаю ссылку на этот родительский JFrame другим JPanels, и если я вызываю setBottomPanel () для ссылки, она не действует, панель не изменяется. У меня было это с использованием bottomLayout.next(bottom), и это изменило панель, но на пустую.

Обновление:

Кажется, он загружается правильно, я изменил код обратно на вызов next(), но передаваемая JPanel пуста. Может ли это быть потому, что я использую GridLayout на JPanel, который добавляется на bottomPanel? Я вообще не передаю ссылку на макет ...

Ответы [ 2 ]

2 голосов
/ 24 февраля 2010

Вы уверены, что приведенный вами пример кода отражает исходный код, с которым вы работаете? Поскольку, предполагая, что bottom является JPanel, а p является JComponent, ваш вызов bottom.add должен пройти компонент, а затем ограничение макета:

bottom.add (p, p.toString());

Когда вы звоните setBottomPanel() из других JPanels, вы снова добавляете компоненты в bottom или добавляете их, только если они новые? Если первое, очень вероятно, что bottom просто не проходит повторную проверку или перекрашивается. Из Java API : «Если компонент был добавлен в отображаемый контейнер, в этом контейнере должна быть вызвана validate для отображения нового компонента.»

0 голосов
/ 24 февраля 2010

Разобрался:

Проблема заключалась в том, что JPanel, передаваемый методу, имел GridLayout, а элементы добавлялись в макет. Как только я изменил способ создания JPanel, код работал нормально:)

Спасибо!

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