У меня есть два JPanel в CardLayout JPanel внутри моего ProgramFrame (расширяет JFrame), это ChooserPanel и ShowPanel.
В ChooserPanel я выбираю номер, который должен появиться на ShowPanel, и нажмите кнопку, чтобы изменить панель в ProgramFrame, перейдя с ChooserPanel на ShowPanel. Но как я могу, элегантно, уведомить кнопку " Щелчок" на ProgramFrame, чтобы он мог переключать JPanel и передавать номер, выбранный в ShowPanel?
Я положил слушателя в ChooserPanel, чтобы уведомить кнопку " ClickFrame". Если это лучший способ, я просто должен знать, как сообщить номер, выбранный для ShowPanel.
Я думал о том, чтобы сделать следующее:
public class ProgramFrame extends JFrame implements SwitchThePanelListener {
private JPanel cardPanel;
public ProgramFrame() {
this.cardPanel = new JPanel();
ChooserPanel chooser = new ChooserPanel(this); // passing the listener
ShowPanel show = new ShowPanel();
cardPanel.add(chooser, "chooser");
cardPanel.add(show, "show");
CardLayout layout = (CardLayout) cardPanel.getLayout();
layout.show(cardPanel, "chooser");
/** Code to set and show the layout **/
}
public void switchThePanelListener() {
CardLayout layout = (CardLayout) cardPanel.getLayout();
layout.show(cardPanel, "chooser");
}
}
Код слушателя:
public interface SwitchThePanelListener {
public void switchThePanelListener();
}
ChooserPanel:
public class ChooserPanel extends JPanel {
public ChooserPanel(SwitchThePanelListener listener) {
/** Code to set the layout and button to fire the listener **/
}
}
И ShowPanel:
public class ChooserPanel extends JPanel {
public ChooserPanel() {
/** Code to set the layout to show the number (how?) **/
}
}
Итак, у вас есть представление, и у вас есть контроллер. Теперь вам нужна модель. В JGoodies lib вы можете найти хороший интерфейс: ValueModel. Это выглядит как
public interface ValueModel {
Object getValue();
void setValue(Object o);
void addPropertyChangeListener(PropertyChangeListener pl);
void removePropertyChangeListener(PropertyChangeListener pl);
}
Ваш контроллер создает экземпляр ValueModel (стандартная реализация в JGoodies - ValueHolder) и передает (устанавливает) обе панели. ChooserPanel устанавливает значение в модель после нажатия кнопки и ShowPanel регистрирует прослушиватель, чтобы получить уведомление об изменении значения. Используйте тот же путь, если у вас есть несколько свойств для передачи между панелями (просто объедините все эти значения в один объект, который будет установлен в ValueModel) или для двунаправленной связи.