我正在尝试创建一个 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),但这也不起作用。
我发现了错误。我需要将 p1 和 p2 添加到面板,而不是仅仅将它们添加到 cl.