packagecom.oop.ch14;importjava.awt.BorderLayout;importjava.awt.CardLayout;importjava.awt.Color;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;/***练习使用卡片布局管理器
*
*将组件元素放置在同一个位置,通过“事件”触发切换。*/
public classCardLayoutTest {static CardLayout cardLayout = newCardLayout();static JPanel jp_images = newJPanel(cardLayout);public static voidmain(String[] args) {
JFrame jFrame= new JFrame("卡片布局管理器");//1、定义需要的组件元素:面板、按钮
JPanel jp_image1,jp_image2,jp_image3;
jp_image1= newJPanel();
jp_image2= newJPanel();
jp_image3= newJPanel();//设置图片面板的背景,模拟在卡片上放置一张图片
jp_image1.setBackground(Color.RED);
jp_image2.setBackground(Color.GREEN);
jp_image3.setBackground(Color.BLUE);//创建放置卡片的面板,同时将卡片布局管理器传入其中//jp_images = new JPanel(cardLayout);//将放置了图片的子面板放置到jp_iamges中
jp_images.add(jp_image1);
jp_images.add(jp_image2);
jp_images.add(jp_image3);//定义jp_button面板放置按钮
JPanel jp_button;
jp_button= newJPanel();//准备两个按钮
JButton jb_pre,jb_next;
jb_pre= new JButton("上一张");
jb_next= new JButton("下一张");//将按钮放置到面板中
jp_button.add(jb_pre,BorderLayout.WEST);
jp_button.add(jb_next,BorderLayout.EAST);//2、将已经包含了组件元素的两个面板放置到窗体中
jFrame.add(jp_images);
jFrame.add(jp_button, BorderLayout.SOUTH);//3、设置JFrame窗体的一些参数//设置在关闭窗体时默认要执行的操作,通常时退出程序本身
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体起始位置、宽高
jFrame.setBounds(200, 150, 400, 300);//设置窗体可见性
jFrame.setVisible(true);/*** 4、给上一张、下一张两个按钮添加点击事件
* 具体实施时需要通过”匿名内部类“来完成
* “匿名内部类”是一个方法中的一个类
* 但它没有名字,他要实现ActionListener接口,并实现其中的监听方法*/jb_pre.addActionListener(newActionListener() {
@Overridepublic voidactionPerformed(ActionEvent e) {
cardLayout.previous(jp_images);
}
});
jb_next.addActionListener(newActionListener() {
@Overridepublic voidactionPerformed(ActionEvent e) {
cardLayout.next(jp_images);
}
});
}/*//如果实现ActionListener接口可以用实现方法的方式做
@Override
public void actionPerformed(ActionEvent e) {
}*/}