GUI之CardLayout

package gui;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.CardLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

class KaPian extends Frame implements ActionListener{
    /*
     * 在操作程序时,经常会遇到通过选项卡按钮来切换程序中的界面,这些界面就相当于一张张卡片,而管理这些卡片的布局管理器就是卡片布局管理器,在任何时候只有其中一张卡片卡片是可见的
     * void first(Container parent)显示parent容器的第一张卡片
     * void last(Container parent)显示parent容器的最后一张卡片
     * void previous(Container parent)显示parent容器的前一张卡片
     * void next(Container parent)显示parent容器的下一张卡片
     * void show(Container parent,String name)显示parent容器中名称为name的组件,如果不存在不会发生任何操作
     */
    Panel cardPanel = new Panel();//定义Panel面板放置卡片
    Panel controlpaPanel = new Panel();//定义Panel面板放置按钮
    CardLayout cardLayout = new CardLayout();//定义卡片布局对象
//    创建两个按钮对象
    Button nextButton;
    Button preButton;
//    定义无参的构造方法,当执行KaPian kp = new KaPian();时,就会执行无参的构造方法
    public KaPian() {
//        setLayout(cardLayout);//由于KaPian继承了Frame类,因此这里相当于f.setLayout(cardLayout);设置布局管理器为cardLayout
        cardPanel.setLayout(cardLayout);//Panel面板布局设置为cardLayout,Panel也是一个容器,但是它不能单独存在,只能存在于其他容器(Window或其子类中,如Frame)中,一个Panel对象代表了一个长方形的区域,在这个区域可以容纳其他组件
        setSize(300,200);//设置窗体的大小
        setVisible(true);//设置窗体可见
//        为窗口添加关闭事件监听器
        this.addWindowListener(new WindowAdapter(){//为窗口添加监听器
            public void windowClosing(WindowEvent e){
                KaPian.this.dispose();
            }
        });
//        在Panel面板对象cardPanel中添加3个文本标签
        cardPanel.add(new Label("第一个界面", Label.CENTER));
        cardPanel.add(new Label("第二个界面", Label.CENTER));
        cardPanel.add(new Label("第三个界面", Label.CENTER));
        nextButton= new Button("下一张卡片");
        preButton=new Button("上一张卡片");
        nextButton.addActionListener(this);//this代表的是这个窗体frame
        preButton.addActionListener(this);
//        把按钮添加到Panel面板对象controlpaPanel中
        controlpaPanel.add(preButton);
        controlpaPanel.add(nextButton);
//        将cardPanel面板放置在窗口边界布局的中间,窗口默认为边界布局,相当于重写Frame类中的这个方法
        add(cardPanel, BorderLayout.CENTER);
//        将cardPanel面板放置在窗口边界布局的南区,窗口默认为边界布局,相当于重写Frame类中的这个方法
        add(controlpaPanel, BorderLayout.SOUTH);
        setTitle("CardLayout");//将窗体标题设置为"CardLayout"相当于重写Frame类中的这个方法
    }
    public void actionPerformed(ActionEvent e) {
//        如果用户单击nextButton,执行的语句
        if(e.getSource()==nextButton){//如果用户点击nextButton则切换cardPanel之后的组件
            //getSource()的作用是获得事件最初发生的对象。
            cardLayout.next(cardPanel);
        }
        if(e.getSource()==preButton){//如果用户点击preButton咋切换cardPanel之前的组件
            cardLayout.previous(cardPanel);
        }    
    }
}
public class T06 {
    public static void main(String[] args) {
    KaPian kp = new KaPian();        
}
}

结果如下

可能有的电脑输出的是乱码,处理方式如下:

点开run Configurations,将common设置为GBK。到这一步执行就没问题了。

(如果还不行,再点Arguments的VM arguments填入-Dfile.encoding=gbk。点击Apply,再点击run,这样就可以使图片和控制台都正常显示)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值