Java-swing-CardLayOut:
package com.etc.layoutmanage;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
/**
* CardLayOut : 卡片布局
* <p>
* 卡片布局:相当于多张卡片叠在一起,每次只能显示一张卡片内容。
*/
public class MyFrame3 extends JFrame {
// 创建一个下拉框
JComboBox<String> box = new JComboBox<>();
// 创建一个内部容器
JPanel card = new JPanel();
public MyFrame3(String title){
super(title);
// 创建一个顶层容器
Container contentPane = getContentPane();
// 设置顶层容器为:边界布局
contentPane.setLayout(new BorderLayout());
// 创建一个下拉列表,供选择
box.addItem("第一面板");
box.addItem("第二面板");
box.addItem("第三面板");
contentPane.add(box,BorderLayout.PAGE_START);
contentPane.add(card,BorderLayout.CENTER);
contentPane.add(card,BorderLayout.CENTER);
// 创建第一个面板:
JPanel p1 = new JPanel();
p1.add(new JButton("红色"));
p1.add(new JButton("蓝色"));
p1.add(new JButton("黑色"));
// 创建第二个面板:
JPanel p2 = new JPanel();
p2.add(new JLabel("输入"));
p2.add(new JTextField(20));
// 创建第三个面板:
JPanel p3 = new JPanel();
p3.add(new ColorLabel("1",Color.RED));
p3.add(new ColorLabel("2",Color.GREEN));
p3.add(new ColorLabel("3",Color.BLUE));
// card.setLayout() 在面板里面设置一个布局器(卡片布局)
card.setLayout(new CardLayout());
card.add(p1,"buttons");
card.add(p2,"text");
card.add(p3,"text1");
// 创建一个触发器(添加事件响应) -----第一种方法
box.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
itemChanged();
}
});
// 创建一个触发器(添加事件响应) -----第二种方法
// box.addActionListener(new ActionListener() {
// @Override
// public void actionPerformed(ActionEvent e) {
// itemChanged();
// }
// });
}
private void itemChanged() {
// card.setLayout() 给card 设置一个布局器
// card.getLayout() 取的它的当前布局器
CardLayout layout = (CardLayout) card.getLayout();
int index = box.getSelectedIndex();
if (index == 0){
layout.show(card,"buttons");
}else if(index ==1){
layout.show(card,"text");
}else if(index ==2){
layout.show(card,"text1");
}
}
private static class ColorLabel extends JLabel {
public ColorLabel(String text, Color bgColor) {
super(text);
// 设置背景为不透明(默认透明)
setOpaque(true);
// 设置背景的颜色
setBackground(bgColor);
// 设置区域尺寸
setPreferredSize(new Dimension(100, 50));
// 设置水平对齐(文本居中)
setHorizontalAlignment(SwingConstants.CENTER);
}
}
}
package com.etc.layoutmanage;
import javax.swing.*;
public class SwingDemo3 {
public static void createGUI() {
MyFrame3 frame = new MyFrame3("Swing Demo"); // 定义窗口名
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 定义关闭窗口
frame.setSize(400, 300); // 定义窗口大小
frame.setVisible(true); // 定义窗口不透明(窗口默认透明,如果不设置,则看不见窗口)
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createGUI();
}
});
}
}