一、GUI概述
GUI(Graphical User Interface)就是图形用户接口,就是让用户和计算机通过图形化界面进行互动,拜托命令行,CLI就是命令行用户接口。GUI提供的对象存在Java.AWT和Javax.Swing两个包中,AWT:抽象窗口工具包,需要调用本地系统方法功能,比较依赖于操作系统,也就是在不同操作系统下运行有些差异,属重量级控件。Swing:在AWT的基础上,建立的一套图形界面系统,提供了更多的组件,而且完全由java实现,不那么依赖操作系统,增强了移植型,属轻量级控件。
二、继承关系图
三、GUI布局
GUI常见布局管理器1、FlowLayout 流式布局,从左到右,占满则下一行,panel的默认布局方式。2、BorderLayout 边界布局,需要指定东西南北中,Frame的默认布局方式。3、GridLayout 网格布局,规则的矩阵。4、GridBayLayout 网格包布局,非规则的矩阵。5、gradLayout 卡片布局,比如选项卡。
四、事件监听机制
事件监听机制其实不难理解,就是在事件源添加一个监听器,这个监听器会监听事件源上被外部所做的各种动作,当某个动作发生后就会产生一个事件对象传回给监听器,监听器中有不同事件对应的应该做的处理方法。比如说按钮作为事件源,可以监听它是被单击还是双击,如果是单击就传回单击事件对象,然后监听器就执行单击事件对应的事件处理方式。示例如代码所示:frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e)//复写窗口关闭事件{System.exit(0);//当点击关闭按钮时执行的代码,可以写其他的。}});
- <pre name="code" class="java">//给frame添加监听器
添加监听器时,到要传入一个监听器(或者称为适配器),这里用的是添加匿名内部类的方法, 创建一个监听器,但是需要注意的是,我们并没有创建WindowListener, 因为它里面有很多个抽象方式,如果我们时间WindowListener这个借口,就必须全部复写这些抽象方法,这显然是非常麻烦的,因为我们只是要到其中的 个别方法。WindowListener借口有一个子类WindowAdapter,它复写了所有抽象方法,所以我们用WindowAdapter,到用到某个方法是,复写该方法即可。 java中,很多的监听器中都有很多事件方法,而且都是抽象的,因此他们也都有对应的子类复写了这里方法,比如鼠标事件MouseListener对应的MouseAdapter。
五、常见事件的方法:
窗体事件:
1、windowActivated(WindowEvent e); 窗口激活时调用。
2、windowOpened(WindowEvent e); 窗口打开时调用。
3、windowClosed(WindowEvent e); 当窗口已被关闭后调用。
4、windowClosing(WindowEvent e); 当敞口正处在关闭时调用。
鼠标事件:
1、mouseEntered(MouseEvent e); 鼠标移入是调用2、mouseClicked(MouseEvent e);鼠标点击(按下并释放)3、mouseExited(MouseEvent e);鼠标离开组件时调用4、mousePressed(MouseEvent e);鼠标在组件上按下时调用5、mouseReleased(MouseEvent e);鼠标在组件上释放是调用双击动作:public void mouseClicked(MouseEvent e){
//其实事件产生后事件e里记录有很多详细信息,比如这里的鼠标事件,就记录有单击了几次。所以可以获取e里面的详细信息确定是单击还是双击。if(e.getClickCount()==20)}
键盘事件:
1、keyPressed(KeyEvent e) ;键盘按下这里的e也记录很多信息,比如按下了哪个键,需要注意的是,键盘上的每一个键都对应一个静态常量和码(code),比如回车键是VK_ENTER。e中的主要方法,getKeyChar()、getKeyCode(),通过两个方法可以知道按下了哪个键。2、consume(); 使用此事件以便不会按照默认方式产生此事件的源代码来处理事件。如:TextField的KeyPressed事件,在按下键盘时,判断满足条件才写入文本中。详见代码示例:
- <span style="font-size:14px;">public void keyPressed(KeyEvent e){
- int code = e.getCode();
- if (!(code>=KeyEvent.VK_0&&code<=KeyEvent.VK_9))
- {
- System.out.pritln("输入的不是数字");
- e.consume();
- }
- }</span>