使用卡布局的Java GUI切换面板

时间:2017-03-02 12:39:45

标签: java swing layout-manager cardlayout

好的我正在使用卡片布局将面板从1个面板切换到第2个面板&然后到第3小组。我一直在网上看,但我找不到我正在寻找的东西。我希望我的面板可以在不同的类中,并使用按钮来回切换到不同的面板。我找到了几个这样的来源,但所有面板都添加到原始面板,然后使用原始面板中的相同按钮切换到不同的面板。

(即)面板2使用Panel 1中的按钮切换到Panel 3,Panel 3使用Panel 1中的按钮切换到Panel 4,Panel 4使用Panel 1中的按钮切换回Panel 2.

但应该是面板1使用面板1的按钮切换到面板2,面板2使用面板2的按钮切换到面板3,面板3应使用面板3的按钮切换到面板1意味着不需要第4个小组。

我的问题是我想使用不同的按钮来回切换而不是相同的按钮,因为我打算在每个面板的每个按钮中编写额外的代码。因为我基本上想要创建3个面板,以便一旦将详细信息添加到注册表单并且用户单击注册,就会将详细信息添加到数据库中,然后将其切换到登录面板并关闭注册面板。 然后,如果登录面板与数据库中的条目匹配,并且用户单击登录,则会输入用户名和密码,转到新面板并关闭登录面板。

现在我已完成注册和登录阶段,只需从1个面板切换到下一个面板即可。有没有办法使用卡布局,所以你切换到不同的面板使用每个面板的不同按钮来执行此操作或是否有一些其他方法用于执行此操作。

如果需要,我可以附加我的代码。但它连接到数据库,因此没有数据库就无法编译。

2 个答案:

答案 0 :(得分:0)

你肯定需要一个4.面板女巫包含3个面板并且有cardLayout。

要从卡上更换卡片,您需要使用方法next()移交actionlistener。我做了一个小而不直观的好例子来表明我的意思; - )

public class CardExample{

private class panel extends JPanel{

    private panel(ActionListener alNext, String text){
        JButton buttonNext = new JButton("next");
        buttonNext.addActionListener(alNext);

        JLabel textLabel = new JLabel(text);

        this.add(textLabel);
        this.add(buttonNext);
    }
}

public CardExample(){}

public static void main(String[] args){

   CardExample ce = new Cardexample();
   ce.myGUI();
}

private void myGUI() {

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.setSize(200, 200);

    CardLayout cardLayout = new CardLayout();

    frame.getContentPane().setLayout(cardLayout);

    ActionListener al = e -> cardLayout.next(frame.getContentPane());

    frame.getContentPane().add(new panel(al, "Panel 1"));
    frame.getContentPane().add(new panel(al, "Panel 2"));
    frame.getContentPane().add(new panel(al, "Panel 3"));

    frame.setVisible(true);
}

}

答案 1 :(得分:0)

按钮是在同一个面板上还是在不同的面板上是无关紧要的。

该按钮只是从布局管理器执行一个方法。您可以使用:

  1. next(...) - 转到CardLayout中的下一个面板,或
  2. show(...) - 显示CardLayout中的特定面板。
  3. 如果您无法使用CardLayout访问该面板,则可以轻松获得此信息。在按钮的ActionListener中,您可以执行以下操作:

    JButton button = (JButton)event.getSource();
    JPanel buttonPanel = (JPanel)button.getParent();
    JPanel cardPanel = (JPanel)buttonPanel.getParent();
    CardLayout layout = (CardLayout)cardPanel.getLayout();
    layout.next(cardPanel);