Java-swing-CardLayOut

7 篇文章 0 订阅

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();
            }
        });
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值