Структура любит это:Java Swing о динамической панели
У меня есть рамка и две кнопки - btnA, btnB
, когда я нажимаю btnA, createPanel() функция возвращает Panela, который будет отображаться в рама,
а также btnB.
btnA и btnB можно переключать.
Прежде чем добавить панель в рамку, я использую функцию clearPanel(), чтобы очистить существующие панели в кадре.
, но вопрос в том, когда я изменяю размер или щелкаю панель, я могу видеть предыдущие панели, которые необходимо удалить уже.
Есть ли что-нибудь, что я потерял?
public void actionPerformed(ActionEvent e) {
String buttonString = e.getActionCommand();
if (buttonString.equals("A")) {
clearPanel();
A = new APanel();
this.getContentPane().add(A.createPanel(), BorderLayout.CENTER);
this.pack();
componentMap.put("A", A);
btnB.setEnabled(true);
btnA.setEnabled(false);
}
else if (buttonString.equals("B")) {
clearPanel();
chart = new BPanel();
this.getContentPane().add(B.createPanel(), BorderLayout.CENTER);
this.pack();
componentMap.put("B", B);
btnA.setEnabled(true);
btnB.setEnabled(false);
}
}
private void clearPanel() {
if (!componentMap.isEmpty()) { // I store panels in a HashMap
for (Object o: componentMap.values()) {
this.getContentPane().remove((JPanel)o);
}
this.getContentPane().invalidate();
componentMap.clear();
}
}
1) Используйте [ 'CardLayout'] (http://docs.oracle.com/javase/7 /docs/api/java/awt/CardLayout.html) 2) Чтобы получить более эффективную помощь, опубликуйте [SSCCE] (http://sscce.org/). –
Вот почему я ответил на эту тему [Почему revalidate()/repaint() на JFrame после добавления в перспективе?] (Http://stackoverflow.com/questions/10671449/java-swing-questions-in -actionlistener). 'pack()' не предназначен для таких вещей, хотя вы пошли с этим ответом, так как советует @AndrewThompson, идите с CardLayout, если хотите, чтобы головные боли, связанные с 'revalidate()/repaint()' от себя :-) –
Посмотрите на этот [пример] (http://stackoverflow.com/questions/8854939/switching-jpanel-within-main-window/8855076#8855076) и [еще один пример] (http: // stackoverflow .com/questions/9394137/one-jframe-and-two-jpanels/9394369 # 9394369) –