要求如下
本来以为很简单,JPanel布局管理器设为CardLayout, 再放两个Button进去,添加按键触发就行,可是后来发现这样会让按钮占据整个窗口大小,而不是默认的按钮大小。后来使用Box.createHorizontalBox()和Box.createVerticalBox();,终于让按钮正常显示并且靠上居中了,可是CardLayout却又失效了,试着把两个Button放在两个JPanel里,再放入ContentPanel里也不行下面是代码
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;public class Precties03 {

public Precties03(){
JFrame frame = new JFrame("数字翻转");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);

JButton b1 = new JButton("1");
JButton b2 = new JButton("2");

JPanel cPane = (JPanel) frame.getContentPane();
cPane.setLayout(new BorderLayout());
JPanel panel = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
Box hBox = Box.createHorizontalBox();
Box vBox = Box.createVerticalBox();
// ContentPanel放在窗口靠上位置
cPane.add(panel, BorderLayout.NORTH);


CardLayout card = new CardLayout(10, 10);
// 将布局管理器设为CardLayout
panel.setLayout(card);
panel2.setLayout(card);
panel3.setLayout(card);

// 按钮1放入box1
hBox.add(b1);
vBox.add(hBox);

Box hBox2 = Box.createHorizontalBox();
Box vBox2 = Box.createVerticalBox();

// 按钮2放入box2
hBox.add(b2);
vBox.add(hBox2);

// box1放入panel2
panel2.add(vBox, "v1");
// box2放入panel3
panel3.add(vBox2, "v2");

// panel2和panel3放入ContentPanel
panel.add(panel2);
panel.add(panel3);

// 按钮触发
b1.addActionListener((ActionEvent e) -> card.show(panel3, "v2"));
b2.addActionListener((ActionEvent e) -> card.show(panel2, "v1"));

frame.setVisible(true);
}

public static void main(String[] args) {
    new Precties03();
    }
}
结果