В настоящее время я создаю Java-графический интерфейс для свингера с помощью Netbeans GUI Builder. У меня есть несколько панелей, которые заменяются на моем главном JFrame, когда пользователь перемещается по GUI, и класс контроллера заботится об этом. На одном шаге, однако, есть панель (FilterDefinitionPanel), которая содержит поле со списком, а также пустую внутреннюю панель (QueryHelperPanel).
Что я хотел бы сделать, это заменить эту внутреннюю панель другой созданной мной (StringQueryDefinitionPanel) в зависимости от того, что пользователь выбирает в поле со списком. Итак, прямо сейчас под обработчиком событий ComboBoxItemStateChanged моего поля со списком у меня есть класс контроллера, запускающий этот метод:
public void selectFilterAttribute(Object item) {
/**
* Determine panel to create based on item selection. Currently always returns the same
* StringQueryDefinitionPanel.
*/
JPanel panel = this.getRequiredQueryHelperPanel(item);
/**
* Swap the placeholder QueryHelperPanel with the required one.
*/
((FilterDefinitionPanel) this.mainFrame.getMainPanel()).setQueryHelperPanel(panel);
/**
* Not sure if all of these are needed :\
*/
mainFrame.validate();
mainFrame.repaint();
mainFrame.pack();
}
Это то, что происходит в методе setQueryHelper панели FilterDefinitionPanel:
public void setQueryHelperPanel(JPanel panel){
this.remove(queryHelperPanel);
this.queryHelperPanel=panel;
this.queryHelperPanel.repaint();
/**
* Again, not sure which refresh methods are needed...
*/
this.validate();
this.repaint();
}
В настоящее время я думаю, что это заменяет мою внутреннюю панель-заполнитель ... чем-то ..., но кажется, что замена ничего не содержит. Я не знаю, имеет ли это значение, но заполнитель и сменная панель имеют одинаковый размер. Я как качалка, так что любые советы будут очень благодарны.