Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用卡布局的Java GUI交换面板_Java_Swing_Layout Manager_Cardlayout - Fatal编程技术网

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

使用卡布局的Java GUI交换面板,java,swing,layout-manager,cardlayout,Java,Swing,Layout Manager,Cardlayout,好的,我使用卡布局将面板从1个面板切换到第2个面板,然后切换到第3个面板。我一直在网上寻找,但我找不到确切的我要找的东西。我希望我的面板是在不同的类和开关来回使用按钮到不同的面板。我找到了一些源代码,但是所有的面板都添加到了一个原始面板中,然后使用原始面板中相同的按钮切换到不同的面板 i、 e面板2使用面板1中的按钮切换到面板3,面板3使用面板1中的按钮切换到面板4,面板4使用面板1中的按钮切换回面板2 但是,面板1应该使用面板1中的按钮切换到面板2,面板2使用面板2中的按钮切换到面板3,面板3

好的,我使用卡布局将面板从1个面板切换到第2个面板,然后切换到第3个面板。我一直在网上寻找,但我找不到确切的我要找的东西。我希望我的面板是在不同的类和开关来回使用按钮到不同的面板。我找到了一些源代码,但是所有的面板都添加到了一个原始面板中,然后使用原始面板中相同的按钮切换到不同的面板

i、 e面板2使用面板1中的按钮切换到面板3,面板3使用面板1中的按钮切换到面板4,面板4使用面板1中的按钮切换回面板2

但是,面板1应该使用面板1中的按钮切换到面板2,面板2使用面板2中的按钮切换到面板3,面板3应该使用面板3中的按钮切换到面板1,这意味着不需要第四个面板

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

现在我已经完成了注册和登录阶段,只是从一个面板切换到下一个面板才是问题所在。是否有一种使用卡片布局的方法,以便您使用每个面板的不同按钮切换到不同的面板来执行此操作,或者是否有其他方法用于执行此操作


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

您肯定需要一个4。面板开关包含3个面板,具有卡片布局

要从卡片中更改卡片,需要使用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);
}

}

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

该按钮仅执行布局管理器中的一个方法。您可以使用:

下一个…-转到卡片布局中的下一个面板,或 显示…-在CardLayout中显示特定面板。 如果您无法使用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);

另外值得一提的是,我对使用卡片布局还不熟悉,因为我通常使用多个帧,并在每个帧之间切换,尽管我知道它的编程很糟糕。我基本上想做splungebob在stack overflow中的一个问题中所问的,但不一定要使用卡片布局,如果需要,我可以附加代码。但是它连接到一个数据库,所以没有数据库它就无法编译。1我们不想要代码转储、发布或删除。2用一些硬编码数据替换数据库。