我的 ProgramFrame 内的 JPanel 的 JPanel 中有两个 JPanel(JPanel),它们是 ChooserPanel 和 ShowPanel。
在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/