Как предупредить панель, что она видна при переключении панелей в CardLayout

1

У меня есть два 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?) **/
    }

}
  • 0
    +1 хороший вопрос
Теги:
swing
cardlayout

1 ответ

1

Итак, у вас есть представление, и у вас есть контроллер. Теперь вам нужна модель. В 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) или для двунаправленной связи.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню