java - 在 CardLayout 中切换面板时如何提醒面板可见

标签 java swing cardlayout

我的 ProgramFrame 内的 JPanelJPanel 中有两个 JPanel(JPanel),它们是 ChooserPanelShowPanel

ChooserPanel中,我选择要在ShowPanel中显示的数字,然后单击按钮来更改ProgramFrame中的Panel,从ChooserPanel切换到ShowPanel。但是我怎样才能优雅地通知Button点击ProgramFrame,以便它可以切换JPanel,并将选择的数字传达给ShowPanel

我在ChooserPanel中放置了一个监听器,以通知按钮点击ProgramFrame。如果这是最好的方法,那么我只需要知道如何将所选的号码传达给 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();
}

选择器面板:

public class ChooserPanel extends JPanel {

    public ChooserPanel(SwitchThePanelListener listener) {
        /** Code to set the layout and button to fire the listener **/
    }

}

以及显示面板:

public class ChooserPanel extends JPanel {

    public ChooserPanel() {
        /** Code to set the layout to show the number (how?) **/
    }

}

最佳答案

所以你有 View 并且有 Controller 。现在您需要模型。在JGoodies lib中你可以找到一个很好的接口(interface):ValueModel。看起来像

public interface ValueModel {
   Object getValue();
   void setValue(Object o);
   void addPropertyChangeListener(PropertyChangeListener pl);
   void removePropertyChangeListener(PropertyChangeListener pl);
}

您的 Controller 实例化一个 ValueModel(JGoodies 中的标准实现是 ValueHolder)并传输(设置)到两个面板。单击按钮后,ChooserPanel 将值设置到模型中,并且 ShowPanel 注册一个监听器以获取有关值更改的通知。如果您有多个属性要在面板之间传输(只需将所有这些值组合在一个对象中,该对象将被设置到 ValueModel 中)或用于双向通信,请使用相同的方式。

关于java - 在 CardLayout 中切换面板时如何提醒面板可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23875937/

相关文章:

java - 在 Netbeans 中读取图像

java - 如何使用XPath通过另一个属性值获取属性内容?

java - JSpinner 值变化监听器

java - 使用 DbUtils 从 SQL 添加列到现有表

Java - 更新/更改 JFrame 的内容 - (删除旧内容)并插入新内容(面板 itd。)

java - 卡片布局绘制

java - CardLayout - 如何更改组件名称

java - Eureka 从一个 Spring Boot 应用程序注册多个实例

java - 无法将 java.lang.String 类型的值转换为 int

java - 尝试执行 CardLayout 但运行 GUI 时不显示任何按钮