本例因为要制作卡片布局管理器,所以首先要构造框架窗体。先通过函数this.setLayout(new BorderLayout())设置Frame的布局管理器为BorderLayout;再两次实例化Panel类得到两个对象pnlCommandArea和pnlDisplayArea;然后通过函数this.add( pnlCommandArea, BorderLayout.NORTH和函数this.add( pnlDisplayArea, BorderLayout.CENTER) 将两Panel对象分别加入到布局管理器中。然后,因为要制作显示功能区域,所以先通过函数pnlDisplayArea.setLayout(cardlayout1)将显示功能区域Panel的布局管理器设置为CardLayout;再通过函数addActionListener(new ActionListener()为四个功能按钮设置事件监听器;最后通过函数pnlCommandArea.add( ) 把四个功能按钮加入到Panel。最后,因为要处理按钮事件,所以首先在处理按钮事件的函数processAction(ActionEvent e)里,先通过函数(Button)e.getSource()获取事件源,该函数返回一个Button类的对象btnEvent;再通过函数btnEvent.equals()就可以判断用户选择是哪个按钮。
卡片布局管理器用的最多的就是在java游戏编程中,当用户选择后,界面将会跳转到理想的界面中去,其中的道理就是用了卡片布局管理器。其实就是用一张界面将另一张界面给覆盖了。所以就感觉是发生了界面的跳转。
下面我们来看看卡片布局管理器的具体代码实现:
import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Graphics; import java.awt.Image; import java.awt.MediaTracker; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; import day2.lovo1.UtilItem; public class CardLayoutDemo extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; //卡片布局管理器 private CardLayout cardLayout; //使用卡片布局管理器的面板 private JPanel cardPnl; //保存图片的数组 private Image[] images = new Image[10]; private JTextField field; private String name; public CardLayoutDemo(){ setTitle("卡片布局管理器"); setSize(500,500); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); MediaTracker media = new MediaTracker(this); /* 加载图片 */ for(int i=0; i<images.length; i++){ images[i] = UtilItem.addImage(media,new ImageIcon("images/"+i+".JPG").getImage()); } /* 跳转的按钮 */ JPanel btn = new JPanel(); JButton next = new JButton("next"); JButton previous = new JButton("previous"); field = new JTextField("5"); JButton go = new JButton("go"); btn.add(next); btn.add(previous); btn.add(go); btn.add(field); next.addActionListener(this); // 注册按钮事件监听器 previous.addActionListener(this); // 注册按钮事件监听器 go.addActionListener(this); this.add(BorderLayout.SOUTH,btn); /*创建卡片布局管理器的容器*/ cardLayout = new CardLayout(); cardPnl = new JPanel(cardLayout); /* 想面板中添加图片 */ for(int i=0; i<images.length; i++){ final Image image = images[i]; JPanel img = new JPanel(){ private static final long serialVersionUID = 1L; @Override public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(image,100,100,null); } }; //将图片加入到CardLayout布局管理器中的容器当中去 cardPnl.add(""+i,img); } // 将使用了CardLayout的面板添加到窗体中显示 this.add(cardPnl, BorderLayout.CENTER); setVisible(true); } @Override public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); // 获取是何种操作 if ("next".equals(cmd)) // 显示下一张图片 cardLayout.next(cardPnl); else if ("previous".equals(cmd)) // 显示上一张图片 cardLayout.previous(cardPnl); else if("go".equals(cmd)){ String page = this.field.getText(); cardLayout.show(cardPnl, page); } } public static void main(String[] args) { new CardLayoutDemo(); } }