我在ProgramFrame内的JPanel的CardLayout中有两个JPanel(扩展了JFrame),它们是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();
}
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的对象中),或者用于双向通信,则使用相同的方法。
关于java - 在CardLayout中切换面板时如何警告面板可见,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23875937/