Правильный способ «поменять» компонент в Java - PullRequest
9 голосов
/ 22 декабря 2011

Я пытаюсь сделать так, чтобы, когда пользователь нажимал что-то в моем GUI (неважно, что), один JTable исчезнет, ​​а другой JComponent заменит его.

В ту минуту, когда яЯ использую следующий код, где contentPanel - это JPanel, который я установил в качестве панели содержимого JFrame:

contentPanel.remove(table);
contentPanel.add(component, BorderLayout.CENTER);
contentPanel.updateUI();

, который отлично работает, но я просто хочу подтвердить, что этоправильный методЯ имею в виду, я не могу думать о каком-либо другом способе достижения этого, но это не обязательно что-то значит, и если есть лучший способ сделать это, с точки зрения производительности или чего-либо еще, я хотел бы знать об этом ...

Ответы [ 2 ]

16 голосов
/ 22 декабря 2011

Нет, это НЕ способ сделать это. Вы никогда не должны вызывать updateUI (). Прочитайте API, этот метод используется только при изменении LAF.

После добавления / удаления компонентов необходимо выполнить:

panel.add(...);
panel.revalidate();
panel.repaint(); // sometimes needed

(неважно, что), один JTable исчезнет, ​​а другой JComponent заменит его.

Может быть, это актуально. Обычно JTable отображается в JScrollPane. Поэтому, возможно, лучшим решением будет использование:

scrollPane.setViewportView( anotherComponent );

тогда полоса прокрутки выполнит проверку для вас.

7 голосов
/ 22 декабря 2011

Лучший способ - использовать CardLayout и добавить обе таблицы, а затем просто отобразить правильную карту / таблицу.

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