CardLayout 不显示面板

问题描述 投票:0回答:1

我正在尝试创建一个 JFrame,它可以使用 CardLayout 在两个面板之间切换。当我运行程序时,JFrame 是空白的。这是我的代码:

import java.awt.CardLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class CLayout {

    public static void main(String[] args) {
        
        JFrame f = new JFrame("test stuff");
        JPanel panel = new JPanel();
        JPanel p1 = new JPanel();
        JPanel p2 = new JPanel();
        CardLayout cl = new CardLayout();
        
        f.add(panel);
        panel.setLayout(cl);
        p1.setLayout(null);
        p2.setLayout(null);
        cl.addLayoutComponent(p1, "panel1");
        cl.addLayoutComponent(p2, "panel2");
        
        JButton btn1 = new JButton("Go to panel 2");
        btn1.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    cl.show(panel, "panel2");
                }
            });
            btn1.setBounds(100,100,100,100);
        p1.add(btn1);
        
        JButton btn2 = new JButton("Go to panel 1");
        btn2.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                cl.show(panel, "panel1");
                }
            });
            btn2.setBounds(100,100,100,100);
        p2.add(btn2);
        
        p1.setBackground(Color.green);
        p2.setBackground(Color.blue);
        
        cl.show(panel, "panel1");
        
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(300, 300);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
        
    }

}

我尝试在没有 CardLayout 的情况下将东西放入框架中,并且可以正常工作。我也尝试过 f.setContentPane(panel),但这也不起作用。

java swing user-interface cardlayout
1个回答
0
投票

我发现了错误。我需要将 p1 和 p2 添加到面板,而不是仅仅将它们添加到 cl.

© www.soinside.com 2019 - 2024. All rights reserved.