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,这样就可以使图片和控制台都正常显示)