zoukankan      html  css  js  c++  java
  • 卡片布局管理器

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

      

  • 相关阅读:
    进程和线程
    jQuery闭包理解
    数据库设计
    DevOps概念
    DevOps实践指南-何处开始(5-8)
    DevOps实践指南-DevOps介绍(1-4)
    iNeuOS工业互联平台,设备容器(物联网)改版,并且实现设备数据点的实时计算和预警。发布3.2版本
    iNeuOS工业互联平台,在“智慧”楼宇、园区等领域的应用
    iNeuOS工业互联平台,机床&PLC硬件网关与平台无缝对接,进行数据交互
    参观2020年上海工业博览会几点感受及判断
  • 原文地址:https://www.cnblogs.com/gzyfj/p/4525660.html
Copyright © 2011-2022 走看看