跟我学Java--图形界面编程.pdf
《跟我学Java--图形界面编程.pdf》由会员分享,可在线阅读,更多相关《跟我学Java--图形界面编程.pdf(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 312 跟我学 Java 本章之前的所有应用程序都是命令行界面,没有特定的用户输入界面。从本章开始,将要学习图形界面编程。对于一个软件来说,不但要有比较强大完善的功能,而且还要有一个简 313图形界面编程13 洁美观的界面。本章主要学习如何进行图形界面编程。其中包括AWT 和 Swing 两部分内容。Swing 基础 事件 Swing 组件 布局管理器 AWT 简介 13.1 AWT 的全称是抽象窗口工具集(Abstract Window Toolkit)。它是一个特殊的组件,其中包含有其他的组件。它的库类也非常丰富,包括了创建Java 图形界面程序的所有工具。用户可以利用AWT,在容器中创
2、建标签、按钮、复选框、文本框等用户界面元素。AWT 中包括了图形界面编程的基本类库。它是 Java 语言 GUI 程序设计的核心,它为用户提供基本的界面构件。这些构件是为了使用户和机器之间能够更好地进行交互,而用来建立图形用户界面的独立平台。其中主要由以下几部分组成,包括:组件类(Component)、容器类(Container)、图形类(Graphics)和布局管理器(LayoutManager)。?Component(组件)按钮、标签、菜单等组件的抽象基本类。?Container(容器)扩展组件的抽象基本类。如 Panel、Applet、Window、Dialog 和Frame等是由Con
3、tainer 演变的类,容器中可以包括多个组件。?LayoutManager(布局管理器)定义容器中组件摆放位置和大小接口。Java 中定义了几种默认的布局管理器。?Graphics(图形类)组件内与图形处理相关的类,每个组件都包含一个图形类的对象。在AWT 中存在缺少剪贴板、缺少打印支持等缺陷,甚至没有弹出式菜单和滚动窗口等,314 跟我学 Java 因此 Swing 的产生也就成为必然。Swing 是纯 Java 实现的轻量级(light-weight)组件,它不依赖系统的支持。本章主要讨论Swing 组件基本的使用方法和使用 Swing 组件创建用户界面的初步方法。Sw i ng 基础
4、13.2 Swing元素的屏幕显示性能要比AWT要好,而且Swing是使用纯Java来实现的。所以Swing也理所当然地具有 Java 的跨平台性。但 Swing 并不是真正使用原生平台提供设备,而是仅仅在模仿。因此,可以在任何平台上来使用Swing 图形用户界面组件。它不必在它们自己本地窗口中绘制组件,而是在它们所在的重量级窗口中绘制,因为Swing 绝大部分是轻量级的组件。AWT 组件具有平台相关性,它是系统对等类的实现;而 Swing 组件在不同平台具有一致性的表现,另外还可以提供本地系统不支持的一些特征。因此 Swing 比 AWT的组件实用性更强。Swing 采用了 MVC(模型-视
5、图-控制,Model-View-Controller)设计模式。注意 13.2.1 Swing 的类层次结构 Javax.swing 包中有顶层容器和轻量级两种类型的组件,Swing 轻量级的组件都是由AWT 的 Container 类来直接或者是间接派生而来的。java.awt.Component -java.awt.Container -java.awt.Window -java.awt.Frame-javax.swing.JFrame -javax.Dialog-javax.swing.JDialog -javax.swing.JWindow -java.awt.Applet-javax
6、.swing.JApplet -javax.swing.Box -javax.swing.Jcomponet Swing 包是 JFC(Java Foundation Classes)的一部分,它由许多包组成,如表13-1 所示。表13-1 Swing 包组成内容 包 描 述 Com.sum.swing.plaf.motif 实现Motif 界面样式代表类 Com.sum.java.swing.plaf.windows 实现Windows 界面样式的代表类 315图形界面编程13 javax.swing Swing 组件和使用工具 javax.swing.border Swing 轻量组件的边
7、框 javax.swing.colorchooser JcolorChooser 的支持类/接口 javax.swing.event 事件和侦听器类 javax.swing.filechooser JFileChooser 的支持类/接口 javax.swing.pending 未完全实现的Swing 组件 javax.swing.plaf 抽象类,定义UI 代表的行为 javax.swing.plaf.basic 实现所有标准界面样式公共基类 javax.swing.plaf.metal 它们实现Metal 界面样式代表类 javax.swing.table Jtable 组件 javax.
8、swing.text 支持文档的显示和编辑 javax.swing.text.html 支持显示和编辑HTML 文档 javax.swing.text.html.parser HTML 文档的分析器 javax.swing.text.rtf 支持显示和编辑RTF 文件 javax.swing.tree Jtree 组件的支持类 javax.swing.undo 支持取消操作 在表 13-1 所示的包中,javax.swing 是 Swing 所提供最大的包,其中包含有 100 个类和 25个接口,并且绝大部分的组件都包含在Swing 包中。?javax.swing.event 包中定义了事件和
9、事件处理类,这与java.awt.event 包类似,主要包括事件类和监听器接口、事件适配器。?javax.swing.pending 包主要是一些没有完全实现的组件。?javax.swing.table 包中主要是Jtable 类的支持类。?javax.swing.tree 包同样也是Jtree 类的支持类。?javax.swing.text、javax.swing.text.html、javax.swing.text.html.parser 和 javax.swing.text.rtf包都是与文档显示和编辑相关的包。13.2.2 Swing 特点?组件的多样化:虽然 AWT 是 Swing
10、 的基础,但是 Swing 中却提供了比 AWT 更多的图形界面组件。而且Swing 中组件的类名都是由字母“J”开头,还增加了一些比较复杂的高级组件,如JTable、JTree。?MVC 模式:MVC 模型的普遍实用性是 Swing 比较突出的特点。其主要包括有模型、视图、控制器3 部分结构。模型用于保存所用到的数据,视图则用于显示数据的内容,控制器用于处理用户和模块交互事件。MVC 设计思想是图形用户界面设计比较通用,这样可以使内容本身和显示方式分类,使数据显示更加灵活多变。?可存取性支持:Swing 的所有组件为了实现对可存取的支持而实现了Accessible 接口。?支持键盘操作:在S
11、wing中支持传统意义上的热键操作,这样就可以替代用户鼠标操作。316 跟我学 Java?使用图标(Icon):在Swing 中可以通过添加图标来修饰自己。这样就更加丰富了 Swing的功能,而且也会使得界面更加美观。13.2.3 Swing 程序结构简介 使用 Swing 进行程序设计,首先要引入 Swing 的包,创建顶层的容器,在容器中创建按钮和标签等一系列的组件,并将组件添加到顶层容器中,然后在组件的周围添加边界,最后对组件的事件进行处理。下面就通过一个 HelloWorld 的示例来演示第一个 Swing 程序,这个程序就是按照前面所介绍的流程进行编写的。01 /首先导入Swing
12、需要的包 02 import javax.swing.*;03 import java.awt.*;04 import java.awt.event.*;05 /创建HelloWorld 类 06 public class HelloWorld 07 /创建主方法 08 public static void main(String args)09 try /try 语句块,监视该段程序 10 /设置窗口风格 11 UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName();12 catch(Exceptio
13、n e)/捕获异常 13 e.printStackTrace();/异常信息输出 14 15 JFrame frame=new JFrame(Swing 第一个示例);/创建顶层容器并初始化 16 Container c=frame.getContentPane();/获取面板容器 17 JPanel pane=new JPanel();/创建面板panel 并初始化 18 c.add(pane);/将面板添加到窗口 19 pane.setLayout(new FlowLayout();/设置布局管理器FlowLayout 20 final JLabel label=new JLabel();
14、/创建标签label 并初始化 21 JButton button=new JButton(按钮);/创建button 并初始化 22 pane.add(label);/向容器中添加组件label 23 pane.add(button);/向容器中添加组件button 24 /对按钮事件的处理方法 25 button.addActionListener(new ActionListener()26 public void actionPerformed(ActionEvent e)27 label.setText(HelloWorld!);/设置label 显示的内容 28 29 );30 /
15、窗口设置结束,开始显示 31 frame.addWindowListener(new WindowAdapter()32 /匿名类用于注册监听器 317图形界面编程13 33 public void windowClosing(WindowEvent e)34 System.exit(0);/程序退出 35 );36 frame.setSize(300,240);/设置窗口大小 37 frame.setVisible(true);/显示窗口 38 39 以上程序中完全按照前面所介绍到的流程,首先是将 Swing 所需要的包导入(第 14 行,然后在主方法中创建顶层容器frame并初始化(第15
16、行)。然后获取面板容器并将面板添加到容器中(第 1618 行),然后创建一个标签组件并初始化,接下来创建按钮组件并为按钮设置事件监听,最后处理事件监听(第 2027行)。运行程序,会弹出一个窗口,单击按钮,就会在按钮旁边出现“HelloWorld!”字样。如图 13-1 所示。Swing 组件 13.3 Swing 的组件与 AWT 组件相似,但又为每一个组件增添了新的方法,并提供了更多的高级组件。所以本节Swing 的基本组件选取几个比较典型的组件进行详细讲解,本节没有讨论到的组件,读者在使用中遇到困难时,可参阅API 文档。13.3.1 按钮(Jbutton)Swing 中的按钮是Jbut
17、ton,它是 javax.swing.AbstracButton 类的子类,Swing 中的按钮可以显示图像,并且可以将按钮设置为窗口的默认图标,而且还可以将多个图像指定给一个按钮。在前面的HelloWorld 例子中就是用到了一个按钮。Jbutton 类的继承关系如下:java.lang.Object +-java.awt.Component +-java.awt.Container +-javax.swing.JComponent +-javax.swing.AbstractButton +-javax.swing.JButton 在Jbutton 中有如下几个比较常用的构造方。?JBut
18、ton(Icon icon):按钮上显示图标。?JButton(String text):按钮上显示字符。?JButton(String text,Icon icon):按钮上既显示图标又显示字符。下面就是一个设置按钮的示例。图13-1 HelloWorld 示例 318 跟我学 Java 01 public class JButtontest 02 public static void main(String args)03 JFrame f=new JFrame(这是一个按钮);04 Container contentPane=f.getContentPane();05 JButton b
19、=new JButton(按钮);/创建一个带初始文本的按钮 06 /如果没有设置文字的位置,系统默认值会将文字置于图形的右边中间位置 07/设置文本相对于图标的水平方向的位置 08 b.setHorizontalTextPosition(JButton.CENTER);09/设置文本相对于图标的垂直方向的位置 10 b.setVerticalTextPosition(JButton.BOTTOM);11 contentPane.add(b);12 f.pack();13 f.show();14 f.addWindowListener(new WindowAdapter()15 public
20、void windowClosing(WindowEvent e)16 System.exit(0);17 18 );19 20 程序运行结果如图13-2 所示。首先创建一个窗口,并设置窗口的显示文本(第 3 行)。然后在窗口中设置一个按钮并设置按钮的显示文字(第5 行)。接下来对文本相对于图标的方向位置进行设置(第 8 行)。最后为按钮添加事件监听(第 1418 行)。13.3.2 复选框(JCheckBox)使用复选框可以完成多项选择,Swing 中的复选框和 AWT 中复选框相比,优点就是 Swing复选框中可以添加图片。该类是javax.swing.JToggleButton 的子类,
21、其继承关系如下:java.lang.Object +-java.awt.Component +-java.awt.Container +-javax.swing.JComponent +-javax.swing.AbstractButton +-javax.swing.JToggleButton +-javax.swing.JcheckBox 复选框可以为每一次的单击操作添加一个事件。复选框的构造方法如下。?JCheckBox():创建一个无文本、无图标、未被选定的复选框。?JCheckBox(Action a):创建一个复选框,属性由参数 Action 提供。图13-2 按钮示例效果 319
22、图形界面编程13?JCheckBox(Icon icon):创建一个有图标,但未被选定的复选框。?JCheckBox(Icon icon,boolean selected):创建一个有图标,并且指定是否被选定的复选框。?JCheckBox(String text):创建一个有文本,但未被选定的复选框。?JCheckBox(String text,boolean selected):创建一个有文本,并且指定是否被选定的复选框。?JCheckBox(String text,Icon icon):创建一个指定文本和图标,但未被选定的复选框。?JCheckBox(String text,Icon ic
23、on,boolean selected):创建一个指定文本和图标,并指定是否被选定的复选框。下面的示例是一个使用复选框来选择喜欢的城市的例子,其代码如下。01 public class JCheckBoxTest 02 JFrame f=null;03 JCheckBoxTest()04 f=new JFrame(复选框示例);/创建一个JFrame 实例对象 05 Container contentPane=f.getContentPane();/定义一个容器 06 contentPane.setLayout(new GridLayout(2,1);/设置窗口的布局 07 JPanel p1
24、=new JPanel();/创建一个面板对象p1 08 p1.setLayout(new GridLayout(1,3);09 p1.setBorder(BorderFactory.createTitledBorder(选择你喜欢的城市?);10 JCheckBox c1=new JCheckBox(北京);11 JCheckBox c2=new JCheckBox(上海);12 JCheckBox c3=new JCheckBox(青岛);13 p1.add(c1);14 p1.add(c2);15 p1.add(c3);16 17 contentPane.add(p1);18 19 f.
25、pack();20 f.show();21 f.addWindowListener(new WindowAdapter()/创建一个窗口监听器 22 public void windowClosing(WindowEvent e)23 System.exit(0);24 25 );26 27 public static void main(String args)28 new JCheckBoxTest();29 30 程序运行结果如图 13-3 所示。首先要创建 JFrame 对象、容器,并设置窗口的布局格式(第 47 行),定义 3 个 JCheckBox 对象,并设置各图13-3 复选框
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 图形界面 编程
限制150内