一、GUI
1、GUI的概念
GUI(Graphical User Interface)即图形用户界面,它能够使应用程序看上去更加友好。
2、AWT、Swing以及SWT
AWT(Abstract Windows Toolkit)是Java语言中最原始的GUI工具包,相关API位于java.awt包中。AWT是一个非常有限的GUI工具包,比如树、表格等都不支持;
然而AWT却无法实现。AWT运行时,每个组件都要依赖于当前平台的GUI对等体(peer)控件,因此,AWT GUI 的外观和行为就会依赖当前平台。
3、java.awt包
java.awt包是Java内置的包,属于Java基础类库(JFC)的一部分,其中包括以下内容;
便于用户输入的一组丰富的界面组件;
将组件放置在适当位置的几种布局管理器;
事件处理模型;
图形和图像工具等等。
4、常用的基本Swing组件
在Swing编程中,有一些经常要使用到的组件,其中包括:
JFrame(窗体,框架)、JPanel(面板,容器)、JButton(按钮)、JLabel(标签)、JTextField(文本框)、JTextArea(文本域)。
5、创建GUI的步骤总结
分析GUI中需要使用的组件;
将GUI分成几个部分,每个部分使用JPanel布局。每个JPanel可以根据情况使用不同的布局管理器;
将多个JPanel布局到一个JFrame上。
二、Swing事件监听快速入门
1、事件处理
对于采用了图形用户界面的程序来说,事件控制是非常重要的;
到目前为止,我们编写的图形用户界面程序都仅仅只是完成了界面,而没有任何实际的功能,要实现相应的功能,必须进行事件处理;
用户与GUI组件进行交互就会发生事件,如:按下一个按钮、用键盘输入一个字符、点击鼠标等等;
当前我们要关注的并不是“事件是如何产生的”,而是讨论当发生事件后,我们应当“如何处理之”。
2、事件处理模型
Java中,事件处理的基本思路如下:
一个源(事件源)产生一个事件(事件对象)并把它送到监听器那里,监听器只是简单地等待,直到它收到一个事件,一旦事件被接受,监听器将处理这些事件;
一个事件源必须注册监听器以便监听器可以接受关于一个特定事件的通知。
3、事件源与事件
当在一个图形用户界面点击鼠标或者按下键盘时,都是针对于具体组件而发生的动作,如:使用鼠标点击某个按钮;按下键盘向文本框输入内容等等;
我们把动作所操纵的对象称为事件源,请注意:事件源一定是指某个组件;
当针对于事件源发生动作时,就会产生一个事件。
4、监听器与监听器接口
针对每一类型的事件,都有与之相对应的监听器,用于监听事件的发生;
在Java中,监听器由一系列接口来提供;
实际上,事件监听器就是实现了事件监听接口的类,监听器不断监听事件源的动作,当事件源产生一个事件后,监听器接收到事件源的通知,就调用特定的方法,以执行指定的动作;
特定的事件监听器只对特定的事件感兴趣。
5、事件类型
实际上,事件是区分类型的,如:操作鼠标时会产生鼠标事件,使用键盘输入字符时会产生键盘事件,窗体打开或关闭时会产生窗体事件等等;
对于不同类型的事件会有不同类型的监听器与之对应;
java.awt.event包中包含了一系列监听器接口,分别用来处理不同类型的事件。
6、事件对象
Java中的所有事件都被封装在事件对象中,所有事件对象皆派生自EventObject类;
对于不同的事件类型会有不同的事件对象,它们都以类似于XxxEvent的方式命名,如:ActionEvent、MouseEvent等等;
事件对象中包含有事件发生时的相关信息(即事件触发时产生的一些数据),会被事件底层机制传递到事件处理函数中;
实际上事件对象就是事件处理函数中被传递进来的参数,如果在处理事件的过程中需要使用到相关的某些数据,可以从事件对象中获取。
三、内部类
1、定义.
内部类是Java独有的一种语法结构,即在一个类的内部定义另一个类,如:
public class ExteriorClass {
private class InteriorClass {
}
}
此时,内部类InteriorClass就成为外部类ExteriorClass中的成员,访问权限遵循类成员的访问权限机制,可以是public、protected、缺省和private;
内部类可以很方便地访问外部类中的其它成员;
内部类主要为了解决类成员间相互访问的问题。
四、匿名内部类
匿名类其实就是一种比较特殊的内部类,只是这个类没有名字而已;
匿名类与内部类相似,能够访问到外部类中的所有成员;
很多情况下(特别是在事件处理中),匿名类一般被定义在外部类的某个方法中,所以也被称为局部内部类,对于局部内部类,它还可以访问到这个方法的参数;
在适当的情况下,使用匿名类来实现事件处理,会使代码更简洁,更灵活;
只能使用一次。
五、GUI中的并发任务
在GUI中,常常可能需要处理并发任务,例如,聊天室应该可以支持传递文件的功能,而传递文件的同时可以继续聊天;
修改 清空聊天记录 事件处理,使其死循环,模拟需要很长时间,可见清理过程中,不能做其他操作;
使用多线程编程,将解决该问题,后续学习。