Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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 如何在小程序中使用2个面板?_Java_Swing_User Interface_Cardlayout - Fatal编程技术网

Java 如何在小程序中使用2个面板?

Java 如何在小程序中使用2个面板?,java,swing,user-interface,cardlayout,Java,Swing,User Interface,Cardlayout,我正在尝试解决如何在swing中跨多个面板导航。我想通过使用CardLayout来实现这一点,而不是使用玻璃面板,因为从我所读到的来看,这似乎是这项工作的正确工具(但是,如果您知道其他情况,请随时纠正我)。我写了一个测试用例,它几乎实现了这一点,但在两个方面还不够。它使用降价的“show()”方法,而且在切换到第二张卡后,card1的按钮开始神秘地再次浮到表面 public class test extends JPanel implements ActionListener{ fina

我正在尝试解决如何在swing中跨多个面板导航。我想通过使用CardLayout来实现这一点,而不是使用玻璃面板,因为从我所读到的来看,这似乎是这项工作的正确工具(但是,如果您知道其他情况,请随时纠正我)。我写了一个测试用例,它几乎实现了这一点,但在两个方面还不够。它使用降价的“show()”方法,而且在切换到第二张卡后,card1的按钮开始神秘地再次浮到表面

public class test extends JPanel implements ActionListener{
    final static int extraWindowWidth = 100;
    JButton jbtnOne = new JButton("Button 1");
        JPanel cardPanel = new JPanel(new CardLayout());
        JPanel card1 = new JPanel();
        JPanel card2 = new JPanel();

    public void addComponentToPane(Container pane) {

        //Create the "cards".
        JPanel card1 = new JPanel() {
            public Dimension getPreferredSize() {
                Dimension size = super.getPreferredSize();
                size.width += extraWindowWidth;
                return size;
            }
        };


        card1.add(jbtnOne);
        card1.add(new JButton("Button 2"));
        card1.add(new JButton("Button 3"));     
        card2.add(new JTextField("TextField", 20));

        cardPanel.add(card1, "card1");
        cardPanel.add(card2, "card2");

        pane.add(cardPanel, BorderLayout.CENTER);
        jbtnOne.addActionListener(this);
    }

    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("TabDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        test demo = new test();
        demo.addComponentToPane(frame.getContentPane());

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {

        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }

    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        if(e.getSource() ==  jbtnOne){
            System.out.println("HERE");
            card2.show();
        }
    }
}

CardLayout
正在管理组件,因此您需要在
CardLayout
上调用
show
,而不是
JPanel\show

CardLayout cardLayout = (CardLayout) cardPanel.getLayout();
cardLayout.show(cardPanel, "card2");
或者,在切换卡组件时,您也可以使用

cardLayout.next(cardPanel);

感谢您指出这一点,我不知道您需要调用的是布局。