Swing 根据其他面板中的选择,重置或重新加载卡布局中的JPanel内容

Swing 根据其他面板中的选择,重置或重新加载卡布局中的JPanel内容,swing,jpanel,wizard,cardlayout,Swing,Jpanel,Wizard,Cardlayout,我使用卡片布局来创建一系列面板 我创建了一个JFrame类。对于该框架类的实例,获取contentPane并设置CardLayout。已将所有面板添加到此contentPane public class JFrameClass1234 extends javax.swing.JFrame { public static JFrameClass1234 jFrameInstance1234; public static JPanelFirstScreen jPanelFirstScreen; pu

我使用卡片布局来创建一系列面板

我创建了一个JFrame类。对于该框架类的实例,获取contentPane并设置CardLayout。已将所有面板添加到此contentPane

public class JFrameClass1234 extends javax.swing.JFrame {
public static JFrameClass1234 jFrameInstance1234;
public static JPanelFirstScreen jPanelFirstScreen;
public static JPanelSecondScreen jPanelSecondScreen;
public static JPanelThirdScreen jPanelThirdScreen;
public static JPanelFourthScreen jPanelFourthScreen;
public static JPanelFifthScreen jPanelFifthScreen;

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {

           jFrameInstance1234 = new JFrameClass1234();

           jPanelFirstScreen = new JPanelFirstScreen();
           jPanelSecondScreen = new JPanelSecondScreen();
           jPanelThirdScreen = new JPanelThirdScreen();
           jPanelFourthScreen = new JPanelFourthScreen();
           jPanelFifthScreen = new JPanelFifthScreen();

           final Container pane = jFrameInstance1234.getContentPane();
           pane.add(jPanelFirstScreen,card1);
           pane.add(jPanelSecondScreen,card2);
           pane.add(jPanelThirdScreen,card3);
           pane.add(jPanelFourthScreen,card4);
           pane.add(jPanelFifthScreen,card5);
           CardLayout cl = (CardLayout)(pane.getLayout());
           cl.show(pane, card1);
           jFrameInstance1234.setVisible(true);
           }
      });
  } 

}//end of class
现在,我可以通过在每个面板的“下一步”或“后退”按钮操作列表中调用以下方法在面板之间移动:

//For going back to previous panel
private void gotoPreviousPanel() {
final Container pane = JFrameClass1234.jFrameInstance1234.getContentPane();
CardLayout cl = (CardLayout) (pane.getLayout());
cl.show(pane, JFrameClass1234.card1);
JFrameClass1234.JFrameinstance1234.setVisible(true);
}

//For going to next panel
private void gotoNextPanel() {
    final Container pane = JFrameClass1234.jFrameInstance1234
            .getContentPane();
    CardLayout cl = (CardLayout) (pane.getLayout());
    cl.show(pane, JFrameClass1234.card3);
    JFrameClass1234.jFrameInstance1234.setVisible(true);
}
但当我在面板之间移动时,值不会被重置或重新加载。我想在面板之间来回移动时重置或重新加载面板。 或者说,第二个面板中的文本框在显示时应始终重新加载,具体取决于在第一个面板中选择的ComboBox选项。有人能帮我做到这一点吗

在这种情况下,我必须遵循什么样的理想设计逻辑?有没有针对我的情况的文件?我使用卡片布局的方式正确吗?否则请给我推荐正确的设计

谢谢,
Chandra

您可以从您拥有的不同UI面板声明一个具有属性的单例类。另外,用updateuifelds方法声明一个接口,并让所有面板实现该接口。在更新当前显示的一个面板中的字段时更新singleton对象。在切换到卡中的其他面板之前,请根据存储在singleton对象中的选择/值重新加载或重置。在接口方法中实现此逻辑。如果需要,请重置Singleton对象中的值。

您可以尝试将ancestorListener添加到正在刷新的JPanel组件中