1、Click to edit Master title style,Click to edit Master text styles,java,图形界面编程,本章之前的所有应用程序都是命令行界面,没有特定的用户输入界面。从本章开始,将要学习图形界面编程。对于一个软件来说,不止要有比较强大完善的功能,而且还要有一个简洁美观的界面。本章就主要学习如何进行图形界面编程。其中包括有,AWT,和,Swing,两部分内容。,Swing,基础,事件,Swing,组件,1 AWT,简介,AWT,的全称是抽象窗口工具集,(Abstract Window Toolkit),,它是一个特殊的组件,其中包含有其他的组
2、件,并且它的库类也非常丰富。包括了创建,Java,图形界面程序的所有工具。可以利用,AWT,在容器中创建标签、按钮、复选框、文本框等用户界面元素。,AWT,中包括了图形界面编程的基本类库。是,Java,语言,GUI,程序设计的核心,它的作用是为用户提供基本的界面构件。这些构件是为了使用户和机器之间能够更好的进行交互,而用来建立图形用户界面的独立平台。,import,java.AWT.*,;,2 Swing,基础,Swing,元素的屏幕显示性能要比,AWT,要好,而且,Swing,是使用纯,Java,来实现的。所以,Swing,也理所当然的具有,Java,的跨平台性。但,Swing,并不是真正使
3、用原生平台提供设备,而是仅仅在模仿,因此可以在任何平台上来使用,Swing,图形用户界面组件。它不必在它们自己本地窗口中绘制组件,而是在它们所在的重量级窗口中绘制,因为,Swing,绝大部分是轻量级的组件。,import,javax.swing.JButton,;,import,javax.swing.JFrame,;,import,javax.swing.JLabel,;,import,javax.swing.JTextField,;,2.1 Swing,的类层次结构,Javax.swing,包中有顶层容器和轻量级两种类型的组件,,Swing,轻量级的组件都是由,AWT,的,Containe
4、r,类来直接或者是间接派生而来的。,Swing,包是,JFC(Java Foundation Classes),的一部分,它由许多包组成,,javax.swing,是,Swing,所提供最大的包,其中包含有,100,个类和,25,个接口,并且绝大部分的组件都包含在,Swing,包中。,javax.swing.event,包中定义了事件和事件处理类,这与,java.awt.event,包类似,主要包括事件类和监听器接口、事件适配器。,2.2 Swing,特点,组件的多样化:虽然,AWT,是,Swing,的基础,但是,Swing,中却提供了比,AWT,更多的图形界面组件。而且,Swing,中组件的
5、类名都是由字母“,J”,开头,还增加了一些比较复杂的高级组件如,JTable,、,JTree,2.3 Swing,程序结构简介,使用,Swing,进行程序设计,首先要引入,Swing,的包,创建顶层的容器,在容器中创建按钮和标签等一系列的组件并将组件添加到顶层容器中,然后在组建的周围添加边界,最后对组件的事件进行处理。,import,javax.swing.*,;,3 Swing,组件,Swing,的组件与,AWT,组件相似,但又为每一个组件增添了新的方法,并提供了更多的高级组件。所以本节,Swing,的基本组件选取几个比较典型的组件进行详细讲解,本节没有讨论到的组件,读者在使用中遇到的困难可
6、参阅,API,文档。,3.1,按钮,(,Jbutton,),Swing,中的按钮时,Jbutton,,它是,javax.swing.AbstracButton,类的子类,,Swing,中的按钮可以显示图像,并且可以将按钮设置为窗口的默认图标,而且还可以将多个图像指定给一个按钮。在前面的,HelloWorld,例子中就是用到了一个按钮。,在,Jbutton,中有如下几个比较常用的构造方。,JButton,(Icon icon),:按钮上显示图标。,JButton,(String text),:按钮上显示字符。,JButton,(String text,Icon,icon,),:按钮上既显示图标又
7、显示字符。,3.2,复选框,(,JCheckBox,),是用复选框可以完成多项选择,,Swing,中的复选框和,AWT,中复选框相比,优点就是,Swing,复选框中可以添加图片。该类是,javax.swing.JToggleButton,的子类,复选框可以为每一次的单击操作添加一个事件,复选框的构造方法如下。,JCheckBox,(),:创建一个无文本、无图标、未被选定的复选框。,3.3,单选框,(,JRadioButton,),单选框,(,JRadioButton,),与,AWT,中的复选框组功能类似,通常,JRadoButton,和,ButtonGroup,来配合一起是用,作用就是一次创建
8、一组按钮,并且在这一组按钮中,每一次只能够选中一个按钮。需要使用到,add(),方法将,JRadioButton,添加到,ButtonGrouo,中。,3.4,组合框,(,JcomboBox,),组合框,顾名思义,就是将一些组件例如按钮及下拉菜单组合的组件。用户可以使用下拉菜单中选择不同的选项,如果此时的组合框处于编辑状态,还可以在组合框中键入值。,3.5,进程条,(,JprogressBar,),进度条就是用图形的方式来模拟描述任务进度的组件。任务的过程中,进度条会以百分比的形式来显示。在程序结束后,进度条显示百分之百,3.6,表格,(,JTable,),表格,(,JTable,),是,Sw
9、ing,新增加的组件,主要是为了将数据以表格的形式显示。通常用数据模型类的对象来保存数据,数据模型类派生于,AbstractTableModel,类,并且必须重写抽象模型类的几个方法,例如,getColumnCount,,,getRowCount,,,getColumnName,,,getValueAt,。因为表格会从这个数据模型的对象中自动获取数据,数据模型类的对象负责表格大小,(,行,/,列,),、数据填写、表格单元更新等与表格有关的属性和操作。,3.7,标签,(,JLable,),标签主要是字符显示;,JLable,(String text),:标签上显示字符。,需要使用到,add(),
10、将,JLable,添加:,private,JLabel,label1=new,JLabel,(,姓名,);,private,JLabel,label2=new,JLabel,(,身份证号,);,this.add,(label1);,this.add,(label2);,this.add,(new,JLabel,(,);,3.8,文本框(,JTextField,),文本框具有文本输入和编辑的功能,文本框组件用于获取到用户所输入的文本。除此之外还有文本区,文本区和文本框的区别是,前者可以输入多行文本,而文本框只接受单行文本的输入。,实现文本框功能的类是,JTextField,,其中提供了多个方法,
11、可以设置输入的文本字符长度限制。密码框和文本框的外观一样,并且也继承自,JTextField,类,密码框只提供专门的密码输入,输入内容不能直接显示,在密码框中以星号或其他形式的符号显示在上面。下面的示例是一个登陆框,其中包括用户名和密码,,4,布局管理器,布局管理器可以对窗口中的组件做有效的布局。,Java,中的布局管理师容器和布局管理器相分离,也就是容器只是把组件放置进来。至于如何放置就要使用到布局管理器了。布局管理器主要包括有,BroderLayout,、,FlowLayout,、,GridLayout,等。本节就主要介绍一下常用的布局管理器。,布局范例,/,响应默认的关闭操作,this.
12、setDefaultCloseOperation,(EXIT_ON_CLOSE);,/,设置布局方式为,FlowLayout,按居中方式排列,控件间水平间距,70,垂直间距,20,this.setLayout,(new,FlowLayout,(FlowLayout.CENTER,70,20);,5,事件处理,事件处理是图形界面和用户进行交互的重要组成部分,,Java,中的事件处理机制主要包括有事件源、事件和事件处理器三个部分。首先要做的是为事件注册相对应的事件处理器,并制定事件,然后由事件处理器获取后进行相应的事件处理。,5.1,事件监听器,事件监听器是监听所触发事件的对象,其中包含有对事件发
13、生后的事件处理操作。对于不同的事件,,Java,中也定义了所相应的事件监听器接口。如下是几个比较常用的事件监听器接口。,5.2,事件适配器,前面介绍了事件监听器,都是以实现事件监听器的接口方式进行定义的。而且前面几章中也介绍过,实现接口,就要实现接口中的所有方法。,Java,中针对每个事件接听器接口,系统定义了相应的实现类。并称为事件适配器,只需要继承事件适配器并覆盖几个必要的方法就可以了。这样一来也使得代码变的更加简洁。,5.3,事件,事件就是触发一个组件所产生的动作,在,Swing,中,有很多的事件,例如鼠标事件、焦点事件等,每一个事件类都会与一个事件类接口相对应,并且由事件所引起的动作都
14、会存放在接口需要实现的方法中。,鼠标事件,鼠标事件是由,MouseEvent,负责,而鼠标监听器则有两种,分别是,MouseListener,和,MouseMotionListener,。其中,MouseListener,负责鼠标的按下、抬起、进入某以区域。当组件注册了鼠标监听器后,如果组件发生以上的动作事件后,就会激活相应的事件处理方法。,键盘事件,键盘事件是用于处理在键盘上所输入的信息,表示键盘事件的类是,KeyEvent,,该类可以获取到产生键盘事件的事件源,而且还可以获取到键盘输入按键的信息。,3,焦点事件,鼠标单击到某一个按钮上的图片时,这个按钮就获得了焦点。例如,鼠标单击窗口的标题
15、栏,就说明这个标题栏获得了焦点。单击这个窗口中的任意一个组件时,这个组件就获得了焦点。并且不同的组件获得焦点后的显示是不同的,例如在文本框获取到焦点时,鼠标的光标就会不停的闪动。,一个窗口中的组件,在同一时间只能够有一个组件获得焦点。如果单击了另一个组件,此时该组件就会失去焦点。在,Java,中与焦点相关的方法如下。,6,举例,/,添加两个按钮的事件监听,btnOK.addActionListener,(this);,btnCancel.addActionListener,(this);,public void,actionPerformed,(,ActionEvent,event),if(,event.getSource,().equals(,btnOK,),如果按下,OK,确认按钮则执行相应操作,if(,event.getSource,().equals(,btnCancel,),如果按下,cancel,取消按钮则执行相应操作,根据事件进行操作范例,/,主程序入口,实例化一个对象即可,public static void main(String,args,),new,FormAdd,();,






