• Java GUI


    1. GUI

    Graphical user interface(图形用户接口):用图形的方式,来显示计算机操作的界面,这样更加直观

    CLI:command line User interface(命令行用户接口):常用的Dos命令行操作,需要记住一些常用的命令,操作不直观

    java.awt:Abstract Window ToolKit(抽象窗口工具包):需要调用本地系统的方法实现功能,属于重量级控件

    javax.swing:在AWT的基础上,建立的一套图形界面系统,提供了很多的组件,而且完全由java实现,增加了移植性,属于轻量级控件

    2. Frame

    public void setTitle(String s):设置窗体的标题

    public void setSize(width, height):设置窗体的大小

    public void setLocation(x, y):设置窗体的区域

    public void setBounds(x, y, width, height):同时设置窗体的大小和所在区域

    public void setVisible(true):设置窗体是否可见

    public class GUIDemo {
        public static void main(String[] args){
            Frame f = new Frame();
            // Frame f = new Frame("窗口标题");
            
            f.setTitle("frame");    // 设置窗体标题
            f.setSize(400, 300);    // 单位:像素,设置窗体的大小
            /* 等同于:
             * Dimension d = new Dimension(400,300);
             * f.setSize(400, 300);
             */
            f.setLocation(400,200);    // 设置窗体所在的区域
            /* 等同于
             * Point p = new Point(400, 200);
             * f.setLocation(p);
             */
            
            /*
             * f.setBounds(x, y, width, height);
             * 等同于:
             * f.setLocation(x, y);
             * f.setSize(width, height);
             */
            
            f.setVisible(true);
        }
    }

    3. 事件监听机制

    事件源:事件发生的地方

    事件:要发生的事情

    事件处理:针对发生的事情做出的处理方案

    事件监听:把事件源和事件联系起来

    public class GUIDemo {
        public static void main(String[] args){
            Frame f = new Frame();
            // Frame f = new Frame("窗口标题");
            
            f.setTitle("frame");    // 设置窗体标题
            f.setSize(400, 300);    // 单位:像素,设置窗体的大小
            /* 等同于:
             * Dimension d = new Dimension(400,300);
             * f.setSize(400, 300);
             */
            f.setLocation(400,200);    // 设置窗体所在的区域
            /* 等同于
             * Point p = new Point(400, 200);
             * f.setLocation(p);
             */
            
            /*
             * f.setBounds(x, y, width, height);
             * 等同于:
             * f.setLocation(x, y);
             * f.setSize(width, height);
             */
            f.addWindowListener(new WindowListener(){
    
                @Override
                public void windowOpened(WindowEvent e) {
                    // TODO Auto-generated method stub
                    
                }
    
                @Override
                public void windowClosing(WindowEvent e) {
                    // TODO Auto-generated method stub
                    System.exit(0);
                }
    
                @Override
                public void windowClosed(WindowEvent e) {
                    // TODO Auto-generated method stub
                    
                }
    
                @Override
                public void windowIconified(WindowEvent e) {
                    // TODO Auto-generated method stub
                    
                }
    
                @Override
                public void windowDeiconified(WindowEvent e) {
                    // TODO Auto-generated method stub
                    
                }
    
                @Override
                public void windowActivated(WindowEvent e) {
                    // TODO Auto-generated method stub
                    
                }
    
                @Override
                public void windowDeactivated(WindowEvent e) {
                    // TODO Auto-generated method stub
                    
                }
                
            });
            f.setVisible(true);
        }
    }

    4. 适配器设计模式

    接口的方法比较多,也得把其他的实现也提供了,即使是空实现

    解决方案:接口(方法比较多)------>适配器(实现接口,空实现)------->实现类(用哪个重写哪个)

    针对上例的改进版:

    f.addWindowListener(new WindowAdapter(){
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });

     例:文本框的数据转移到文本域

    public class FrameDemo {
        public static void main(String[] args){
            Frame f = new Frame("数据转移");
            f.setBounds(400, 200, 400, 300);
            f.setLayout(new FlowLayout());
            
            final TextField tf = new TextField(20);
            Button bu = new Button("heoo");
            final TextArea ta = new TextArea(10, 40);
            
            f.add(tf);
            f.add(bu);
            f.add(ta);
            
            f.addWindowListener(new WindowAdapter(){
                @Override
                public void windowClosing(WindowEvent e){
                    System.exit(0);
                }
            });
            
            bu.addActionListener(new ActionListener(){
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    String tf_str = tf.getText().trim();
                    tf.setText("");
                    // ta.setText(tf_str);;
                    ta.append(tf_str + "
    ");
                    tf.requestFocus();   // 获取光标
                }
                
            });
            
            f.setVisible(true);
        }
    }

    效果图:

     例:颜色变换

    public class ColorTranverce {
        public static void main(String[] args) {
            final Frame f = new Frame();
            f.setBounds(400, 200, 400, 300);
            f.setLayout(new FlowLayout());
    
            Button redButton = new Button("red");
    
            /*
             * 按钮的动作实现更改背景色 redButton.addActionListener(new ActionListener(){
             * 
             * @Override public void actionPerformed(ActionEvent e) { // TODO
             * Auto-generated method stub f.setBackground(Color.red); }
             * 
             * });
             */
    
            // 对按钮田间鼠标点击事件
            redButton.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    f.setBackground(Color.red);
                }
                
                @Override
                public void mouseEntered(MouseEvent e){
                    f.setBackground(Color.gray);
                }
            });
    
            f.add(redButton);
            f.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
    
            f.setVisible(true);
        }
    }

    文本框只能输入数字和字符案例

    public class NumbericDemo {
        public static void main(String[] args){
            Frame f = new Frame("number");
            f.setBounds(400, 200, 400, 300);
            f.setLayout(new FlowLayout());
            Label label = new Label("please input your qq number");
            TextField tf = new TextField(40);
            
            f.add(label);
            f.add(tf);
            
            tf.addKeyListener(new KeyAdapter(){
                @Override
                public void keyPressed(KeyEvent e){
                    char ch = e.getKeyChar();
                    if(!(ch >= '0' && ch <= '9')){
                        e.consume();    // 事件取消
                    }
                }
            });
            
            f.addWindowListener(new WindowAdapter(){
                @Override
                public void windowClosing(WindowEvent e){
                    System.exit(0);
                }
            });
            
            f.setVisible(true);
        }
    }

    5. 菜单组件

    5.1 单级菜单

    public class MenuDemo {
        public static void main(String[] args){
            Frame f = new Frame("单极菜单");
            f.setBounds(400, 200, 400, 300);
            f.setLayout(new FlowLayout());
            
            MenuBar mb = new MenuBar();
            Menu m = new Menu("file");
            MenuItem mi = new MenuItem("exit");
            
            m.add(mi);
            mb.add(m);
            
            f.setMenuBar(mb);
            
            mi.addActionListener(new ActionListener(){
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    System.exit(0);
                }
                
            });
            
            f.addWindowListener(new WindowAdapter(){
                @Override
                public void windowClosing(WindowEvent e){
                    System.exit(0);
                }
            });
            
            f.setVisible(true);
        }
    }

    5.2 多级菜单

    public class MenuDemo {
        public static void main(String[] args){
            final Frame f = new Frame("title");        // 匿名内部类调用的变量必须使用final修饰
            f.setBounds(400, 200, 400, 300);
            f.setLayout(new FlowLayout());
            
            MenuBar mb = new MenuBar();
            Menu m1 = new Menu("file");
            Menu m2 = new Menu("change title");
            
            final MenuItem mi1 = new MenuItem("t");
            final MenuItem mi2 = new MenuItem("g");
            MenuItem mi3 = new MenuItem("return titile");
            MenuItem mi4 = new MenuItem("open notepad");
            MenuItem mi5 = new MenuItem("exit");
            
            final String name = f.getTitle();
            
            m2.add(mi1);
            m2.add(mi2);
            m2.add(mi3);
            
            m1.add(m2);
            m1.add(mi4);
            m1.add(mi5);
            
            mb.add(m1);
            
            f.setMenuBar(mb);
            
            mi1.addActionListener(new ActionListener(){
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    f.setTitle(mi1.getLabel());
                }
                
            });
            
            mi2.addActionListener(new ActionListener(){
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    f.setTitle(mi2.getLabel());
                }
                
            });
            
            mi3.addActionListener(new ActionListener(){
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    f.setTitle(name);
                }
                
            });
            
            mi4.addActionListener(new ActionListener(){
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    Runtime rt = Runtime.getRuntime();
                    try {
                        rt.exec("notepad");
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                }
                
            });
            
            mi5.addActionListener(new ActionListener(){
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    System.exit(0);
                }
                
            });
            
            f.addWindowListener(new WindowAdapter(){
                @Override
                public void windowClosing(WindowEvent e){
                    System.exit(0);
                }
            });
            
            f.setVisible(true);
        }
    }

    效果图:

  • 相关阅读:
    浅谈MVC架构模式
    用JSP实现学生查询
    读cookie中文字符乱码问题
    span 换行与不换行
    SAP HANA中的Synonym使用及demo 沧海
    SAP HANA HDB序列的使用方法及技巧(SAP HANA HDB SEQUENCE ) 沧海
    SAP HANA中创建与时间相关的数据及Time Attribute View(Fiscal) 沧海
    SAP HANA中创建与时间相关的数据及Time Attribute View(Gregorian) 沧海
    SAP HANA如何在存储过程中使用自定义的table type 沧海
    SAP HANA SQL执行计划(SAP HANA SQL explain plan)(SQL 优化分析) 沧海
  • 原文地址:https://www.cnblogs.com/feng-ying/p/9608994.html
Copyright © 2020-2023  润新知