卡片布局管理器

本例因为要制作卡片布局管理器,所以首先要构造框架窗体。先通过函数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();
    }
    
}

  

原文地址:https://www.cnblogs.com/gzyfj/p/4525660.html