CardLayout卡片布局(切换到指定卡片演示)
时间: 2024-01-09 12:05:30 浏览: 42
好的,我了解了您的要求。以下是使用 CardLayout 实现切换到指定卡片的示例代码,您可以参考一下:
```java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CardLayoutDemo implements ActionListener {
JPanel cards; // 卡片容器
JButton btn1, btn2, btn3; // 按钮组件
final static String CARD1 = "第 1 张卡片";
final static String CARD2 = "第 2 张卡片";
final static String CARD3 = "第 3 张卡片";
public void addComponentToPane(Container pane) {
// 创建按钮
btn1 = new JButton("第 1 张卡片");
btn1.addActionListener(this);
btn2 = new JButton("第 2 张卡片");
btn2.addActionListener(this);
btn3 = new JButton("第 3 张卡片");
btn3.addActionListener(this);
// 创建卡片容器
JPanel card1 = new JPanel();
card1.add(new JLabel("这是第 1 张卡片"));
JPanel card2 = new JPanel();
card2.add(new JLabel("这是第 2 张卡片"));
JPanel card3 = new JPanel();
card3.add(new JLabel("这是第 3 张卡片"));
// 创建卡片容器,并设置布局为 CardLayout
cards = new JPanel(new CardLayout());
cards.add(card1, CARD1);
cards.add(card2, CARD2);
cards.add(card3, CARD3);
// 添加按钮和卡片容器到窗口中
pane.add(btn1, BorderLayout.PAGE_START);
pane.add(btn2, BorderLayout.LINE_START);
pane.add(btn3, BorderLayout.PAGE_END);
pane.add(cards, BorderLayout.CENTER);
}
@Override
public void actionPerformed(ActionEvent e) {
// 切换到指定卡片
CardLayout cl = (CardLayout) (cards.getLayout());
if (e.getSource() == btn1) {
cl.show(cards, CARD1);
} else if (e.getSource() == btn2) {
cl.show(cards, CARD2);
} else if (e.getSource() == btn3) {
cl.show(cards, CARD3);
}
}
private static void createAndShowGUI() {
// 创建窗口并设置基本属性
JFrame frame = new JFrame("CardLayoutDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(400, 300));
// 添加组件到窗口中
CardLayoutDemo demo = new CardLayoutDemo();
demo.addComponentToPane(frame.getContentPane());
// 显示窗口
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
// 使用事件分发线程(Event Dispatch Thread)显示用户界面
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
```
运行示例程序后,单击按钮即可切换到指定卡片。