6. GUI

1.GUI 图形用户界面:
Graphical User Interface(图形用户接口)

CUL 命令行界面:
Command line User Interface(命令行用户接口)
如:Dos命令行操作。

Java为GUI提供的对象都存在java.awt 和 java.swing 两个包中。
(Java做图形化界面相对较少,得先装虚拟机。一般用C++等,Windows内置了C++的解析器。)

2.awt , swing包

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

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

3.AWT
(1)继承关系图:
这里写图片描述
api:

component 是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。典型图形用户界面中的按钮、复选框和滚动条都是组件示例。
Component 类是与菜单不相关的 Abstract Window Toolkit 组件的抽象超类。还可以直接扩展类 Component 来创建一个轻量级组件。轻量级组件是与本机不透明窗口不相关的组件。

类 Container
一般的 Abstract Window Toolkit(AWT) 容器对象是一个可包含其他 AWT 组件的组件。
添加到容器中的组件放在一个列表中。列表的顺序将定义组件在容器内的正向堆栈顺序。如果将组件添加到容器中时未指定索引,则该索引将被添加到列表尾部(此后它位于堆栈顺序的底部)。

(2)布局管理器:
布局管理器

坐标式布局。

4.Frame演示:

public class AWTDemo {

    public static void main(String[] args) {

        Frame f =new Frame("my frame");
//      f.setSize(500, 400);   //像素值
//      f.setLocation(400, 200);  //坐标位置
        f.setBounds(400, 200, 500, 400);
        f.setLayout(new FlowLayout()); //设置流式布局,默认上居中
        Button but =new Button("一个按钮");

        f.add(but); //将按钮放在窗体中。窗体默认布局是边界式布局,默认窗口全占


        f.setVisible(true);

    }

}

5.事件监听机制 组成:

1.事件源(组件):小强

2.事件(Event):被揍

3.监听器(Listener):保镖

4.事件处理(引发事件后的处理方式):还击

这里写图片描述

示例1: 添加窗口监听器
Frame.addWindowListener(WindowListener w)
WindowListener接口的(适配器类)抽象子类:WindowAdapter



public class AWTDemo {

    public static void main(String[] args) {

        Frame f =new Frame("my frame");
//      f.setSize(500, 400);   //像素值
//      f.setLocation(400, 200);  //坐标位置
        f.setBounds(400, 200, 500, 400);
        f.setLayout(new FlowLayout()); //设置流式布局,默认上居中
        Button but =new Button("一个按钮");

        f.add(but); //将按钮放在窗体中。窗体默认布局是边界式布局,默认窗口全占

        f.addWindowListener(new WindowAdapter(){  
            //添加监听器,参数是WindowListener接口对象,即继承它的抽象子类WindowAdapter
            //然后重写要用到的监听方法。

            @Override
            public void windowClosing(WindowEvent e) {

                super.windowClosing(e); 
//              System.out.println("closing......");
                System.exit(0);
            }

        });
        //WindowListener接口的抽象子类WindowAdapter实现了该接口的所有方法,但是没有抽象方法,
        //目的是为了方便创建监听器对象。继承它覆盖其中一个方法就可以了
        f.setVisible(true);

    }

}
示例2:添加按钮监听器
Button.addActionListener(ActionListener a)
ActionListener接口只有一个抽象方法,直接实现。

public class AWTDemo {

    public static void main(String[] args) {

        Frame f =new Frame("my frame");
//      f.setSize(500, 400);   //像素值
//      f.setLocation(400, 200);  //坐标位置
        f.setBounds(400, 200, 500, 400);
        f.setLayout(new FlowLayout()); //设置流式布局,默认上居中
        Button but =new Button("退出");

        f.add(but); //将按钮放在窗体中。窗体默认布局是边界式布局,默认窗口全占

        //在按钮上加上一个监听。
        but.addActionListener(new ActionListener(){
            //添加按钮监听器,参数是ActionListener接口对象,它只有一个抽象方法,所以没有适配器类,
            //直接实现这个接口,然后实现抽象方法。
            @Override
            public void actionPerformed(ActionEvent e) { //事件和事件对象
                                                                                        //事件发生时事件对象自动返回
                     System.exit(0);  //事件处理
            }

        });



        f.addWindowListener(new WindowAdapter(){  
            //添加窗口监听器,参数是WindowListener接口对象,即继承它的(适配器类)抽象子类WindowAdapter
            //然后重写要用到的监听方法。

            @Override
            public void windowClosing(WindowEvent e) { //事件和事件对象
                                                                                        //事件发生时事件对象自动返回

                super.windowClosing(e); 
//              System.out.println("closing......");
                System.exit(0);   //事件处理
            }

        });
        //WindowListener接口的(适配器类)抽象子类WindowAdapter实现了该接口的所有方法,但是没有抽象方法,
        //目的是为了方便创建监听器对象。继承适配器类覆盖其中一个方法就可以了

        f.setVisible(true);

    }

}

6.鼠标事件,窗口事件:

public class MouseAndKeyDemo {

    private Frame f;
    private TextField tf;
    private Button but;
    public MouseAndKeyDemo(){
            init();
    }


    private void init() {
        f = new Frame("演示鼠标和键盘监听");
        f.setBounds(400, 200, 500, 400);

        f.setLayout(new FlowLayout());

        tf = new TextField(15);
        but = new Button("一个按钮");

        f.add(tf);
        f.add(but);

        myEvent();


        f.setVisible(true);
    }


    private void myEvent() {
        //给文本框添加键盘监听


        tf.addKeyListener(new KeyAdapter() {
            private int count = 1;
            @Override
            public void keyPressed(KeyEvent e) {
                super.keyPressed(e);

//              if(e.getKeyCode() == KeyEvent.VK_ENTER){  //回车
//                  tf.setText(""+count++);
//              }

//              if(e.isControlDown() &&( e.getKeyCode() == KeyEvent.VK_ENTER)){  
                                                                                                //ctrl+回车
//                  tf.setText(""+count++);
//              }
//              

                int code = e.getKeyCode();
                if(!(code>=KeyEvent.VK_0&& code<=KeyEvent.VK_9)){
                    e.consume();//不会按照默认的方式,由产生此事件的源代码来处理此事件。

                    System.out.println("必须是数字!");
                }

            }

        });


        //窗口退出事件
        f.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {

                super.windowClosing(e);
                System.exit(0);
            }

        });

        //在按钮上添加一个鼠标监听事件(当鼠标监听和按钮监听同时存在时,鼠标监听优先)
        but.addMouseListener(new MouseAdapter() {
            private int count = 1;          

            @Override
            public void mouseClicked(MouseEvent e) {                
                super.mouseClicked(e);
                if(e.getClickCount()==2){       //双击
                        tf.setText(""+ count++);
                }
            }

        });


    }


    public static void main(String[] args) {
        new MouseAndKeyDemo();
    }

}

7.Swing演示,安装GUI插件jigloo:

8.菜单

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值