java基础 卡片布局方式

本文详细介绍了如何在Java中使用CardLayout组件实现窗口内的卡片式界面切换,包括创建Frame、Panel、按钮和事件监听器的运用。
摘要由CSDN通过智能技术生成

直接上代码,代码有保姆级注释


package notebook;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class FileUtil {

    public static void main(String[] args) {

        new Cardlayout();//给该对象分配内存,调用构造方法

    }
}


class Cardlayout extends Frame implements ActionListener {//component、container、windows、frame//容器类继承自Frame
                                                         //   控件        容器     顶级窗口   窗口
    Panel cardPanel = new Panel();//放置卡片的panel面板

    Panel controlpaPanel = new Panel();//放置按钮的容器、面板

    Button nextbutton, preButton;//声明两个button 类型 的 变量

    CardLayout cardlayout = new CardLayout();//卡片布局管理器



    //==================================================================================================================

    public Cardlayout() {//构造方法,对象一实例化就调用


        this.setSize(300, 200);//调用父类的Frame的设置窗口大小的方法
        this.setVisible(true);//是否可见


        //关闭事件监听
        this.addWindowListener(new WindowAdapter() {//添加你要监听的窗口,要监听的窗口对象(实现接口)接口的意义:统一   cut 看到这个方法就知道他要干嘛
            @Override
            public void windowClosing(WindowEvent e) {//如果监听到这个窗口被关闭
                Cardlayout.this.dispose();//关闭该窗口
                //这里this不能直接定位到Cardlayout类,所以要加上类名,而只有类名又不代表实例化,所以要加上this
                //监听windowAdapter对象(窗口),如果关闭,那么就关闭
            }
        });

        cardPanel.setLayout(cardlayout);//这个窗口的布局方式是cardlayout

        cardPanel.add(new Label("第一个界面", Label.CENTER));//添加控件,且位于中心

        cardPanel.add(new Label("第2个界面", Label.CENTER));
        cardPanel.add(new Label("第3个界面", Label.CENTER));

        nextbutton = new Button("下一张卡片");//设置按钮内容(label)
        preButton = new Button("上一张卡片");

        nextbutton.addActionListener(this);//监听当前窗口(this)里的nextbutton按钮
        preButton.addActionListener(this);

        controlpaPanel.add(preButton);
        controlpaPanel.add(nextbutton);//添加控件

        this.add(cardPanel, BorderLayout.CENTER);//为什么这里调用的是container的方法,而不是cardlayout的?
//将指定的组件添加到此容器的末尾
        //cardPanel不是一个panel的容器吗?怎么在这里被当作组件了。   把cardpanel这个容器当作一个组件放进了cardlayout容器中
        //BorderLayout是一个容器?  是的

        this.add(controlpaPanel, BorderLayout.SOUTH);

    }


    @Override
    public void actionPerformed(ActionEvent e) {

        if (e.getSource() == nextbutton) {//点击nextbutton

            cardlayout.next(cardPanel);
        }
        if (e.getSource() == preButton) {//点击prebutton

            cardlayout.previous(cardPanel);//显示这个窗口里的上一个界面
        }

    }
}

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值