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