第16章图形界面编程图形用户界面(GraphicalUserInterface)简称GUI,提供了一种更加直观、友好的与用户进行交互的方式。利用Java语言进行图形用户界面操作主要由java.awt和javax.swing两个包来完成。其中,AWT包是图形用户界面处理的基本工具包,Swing包在AWT包的基础上进行了升级、扩展,具有更加强大的图形界面开发功能。本章在了解AWT包功能的基础上,重点讲解Swing的功能。16.1AWT简介Java1.0的出现带来了抽象窗口工具箱(AWT)。设计目标是希望构建一个通用的GUI,使得利用它编写的程序能够运行在所有的平台上,以实现Sun公司提出的口号“一次编写,随处运行”。JavaAWT中包含了许多类来支持GUI设计。AWT由Java的java.awt包提供,该包中有许多用来设计GUI的组件类,如按钮、菜单、列表、文本框等组件类;同时还包含窗口、面板等容器类。AWT的具体层次结构如图16.1所示。16.1AWT简介Java提供了一系列AWT软件包,其中主要的包及包的描述如图16.2所示。16.1AWT简介java.awt包提供了基本的Java程序的GUI设计工具。主要包括组件、容器和布局管理器三个概念,其具体描述如图16.3所示。334157810来这群每日java大型互联网知识16.2Swing简介Swing是Java基础类库(JavaFoundationClasses)中有关图形界面的类库。Swing扩展自AWT。例如JFrame扩展自Frame,JButton扩展自Component等。基本上AWT中的每种控件都能在Swing中找到替代品,比如AWT中的Button对应于Swing中的JButton,AWT中的TextField对应于Swing中的JTextField等。16.2Swing简介Swing包是JFC(JavaFoundationClasses)的一部分,它由许多包组成,这些包的名称及描述如表16.1所示。包名包的描述Com.sum.swing.plaf.motif实现Motif界面样式代表类Com.sum.java.swing.plaf.windows实现Windows界面样式的代表类javax.swingSwing组件和使用工具javax.swing.borderSwing轻量组件的边框javax.swing.colorchooserJcolorChooser的支持类/接口javax.swing.event事件和侦听器类javax.swing.filechooserJFileChooser的支持类/接口javax.swing.pending未完全实现的Swing组件javax.swing.plaf抽象类,定义UI代表的行为javax.swing.plaf.basic实现所有标准界面样式公共基类javax.swing.plaf.metal它们实现Metal界面样式代表类javax.swing.tableJtable组件javax.swing.text支持文档的显示和编辑javax.swing.text.html支持显示和编辑HTML文档javax.swing.text.html.parserHtml文档的分析器javax.swing.text.rtf支持显示和编辑RTF文件javax.swing.treeJtree组件的支持类javax.swing.undo支持取消操作16.3容器类窗口(JFrame)、面板(JPanel)和对话框(J)是Swing中提供用来创建表示图形用户界面的类。该类的对象将被当作容器使用,所有的Swing组件都必须被添加到容器中,才能被显示出来。16.3.1JFrame类JFrame是一个窗口容器组件,可以被显示在用户桌面上,同时也是一个框架,在其中,可以添加需要的其他的Swing组件。JFrame是少数几个不是通过绘制的方式显示的Swing组件。JFrame类的构造方法如图16.5所示。16.3.1JFrame类JFrame类中还提供了一些与窗口有关的方法。其主要方法与方法描述如表16.2所示。方法方法描述publicvoidsetVisible(booleanb)判断窗体是否可见。如果参数b为true则表示显示该窗体,否则表示不可见publicvoidsetBackground(Colorc)设置窗体背景颜色publicvoidsetTitle(Strings)设置标题。其中参数s表示要显示在窗体边界中的标题publicStringgetTitle()获取窗体边界的标题。如果没有标题则返回空字符串publicvoidpack()调整适合其子组件的大小和布局窗口的大小publicvoidsetResizable(booleanresizable)设置窗口大小是否可以调整publicContainergetContentPane()返回此窗体的contentPane对象publicvoidsetLayout(LayoutManagermanager)设置布局管理器publicvoidvalidate()验证容器及其容器中的组件16.3.2JDialog类JDialog是一个用来创建对话框的类,是Dialog类的子类。创建的JDialog对象可以用来向用户返回信息,接收用户的输入,实现与用户的交互。JDialog与JFrame的区别在于:JDialog对象需要依赖于其他的对话框(比如Jframe)而存在,当它所依赖的对话框关闭或最小化的时候,该对话框也随之关闭或最小化。16.3.2JDialog类JDialog类创建对话框对象的构造方法如图16.7所示。JDialog类中的主要方法及方法描述如表16.3所示。方法方法描述StringgetTitle()用于获取对话框的名字voidsetTitle(Strings)用于设置对话框的名字voidsetModal(booleanb)用于设置对话框的模式setSize(intwidth,intheight)用于设置对话框的大小voidsetVisible(booleanb)用于设置对话框是否可见16.3.3JPanel类在得到了JFrame的内容面板后我们就可以直接将其他的Swing组件放在其中,或者直接在上面描绘图画或文字,但是习惯上一般不会这么做。通常会将这些图画或文字信息描绘在名为JPanel的容器上,然后再将JPanel实例放在内容面板上。这样可以使得面板上的布局更合理。JPanel通常只作为纯粹的容器来使用,它不能像框架、窗口或者对话框那样独立存在。JPanel的构造方法如图16.9所示。16.4Swing常用基本组件创建图形用户界面GUI,就是为了让计算机程序更好的和用户交互。JavaSwing提供了二十多种不同的用户界面组件。所有的Swing组件都是从javax.swing.Jcomponent类中派生而来的,从而继承了组件所特有的属性和方法。16.4.1常用组件的共性操作Swing类库中的组件都继承自javax.swing.JComponent,因此都具有JComponent的操作,包括设置背景色、设置前景色、设置字体以及设置是否禁用等。表16.4中是JComponent中常用的方法及方法描述。方法方法描述intgetHeight()返回组件高度intgetWidth()返回组件宽度StringgetToolTipText()返回工具提示voidsetToolTipText(Stringtext)设置工具提示DimensiongetSize(Dimensionrv)返回尺寸intgetX()返回位置xvoidsetBackground(Colorbg)设置背景色voidsetOpaque(booleanisOpaque)设置是否透明voidsetVisible(booleanaFlag)设置是否可见voidsetFont(Fontfont)设置字体voidsetBorder(Borderborder)设置边框16.4.2按钮(JButton)按钮是用户界面中常用的组件。用户使用Swing按钮可以显示图像,将整个按钮设置为窗口默认图标,来处理鼠标在按钮上的事件。java.swing包中提供了标准的按压式按钮(JButton)。同时提供了选择式按钮:多选择(JCheckBox)、单选择(JRadioButton)等。我们在这里先来讲解JButton的知识。JButton的构造方法如图16.11所示。16.4.3文本框(JTextField)与密码输入框(JPasswordField)文本框(JTextField)也是一种常见的组件,用于处理一行文本(中间没有回车符)。JTextField是JTextComponent的子类。密码输入框是JTextField的一个子类。JTextField和JPasswordField的构造函数形式和常用方法完全一样。这里只列出JTextField的构造函数,如图16.13所示。16.4.4文本域(JTextArea)文本域(JTextArea)也是一种常用组件,用于处理多行文本。JTextArea同JTextField一样,都是JTextComponent的子类,因此它们的很多操作都类似,我们不再赘述。JTextArea的构造函数如图16.15所示。16.4.5标签(JLabel)标签(JLabel)用来显示一段文本,常用在JTextField或者JTextArea前面,提示用户要填写什么样的信息。JLabel用于显示文字,也可以同时显示文字和图标,一般不用于接收鼠标键盘的动作。JLabel的构造方法如图16.17所示。16.4.6单选按钮(JRadioButton)JRadioButton用来实现单选按钮组件,按钮有选中和没被选中两种状态。多个单选按钮中,一次只能有一个按钮处于被选中状态。JRadioButton的构造方法如图16.19所示。16.4.7复选框(JCheckBox)JCheckBox是用来实现JCheckBox的组件。复选框是一个可以被选定和取消选定的项,它将其状态显示给用户。一次可以选中多个复选框。JCheckBox类的构造方法如图16.21所示。16.4.8下拉列表(JComboBox)下拉列表(JComboBox)是一种常见的组件。用户可以从下列的菜单列表中选择所需要的数据。一个下拉列表只能选择一个选项。JComboBox的构造方法如图16.23所示。可以将需要在下拉列表中显示的各项放入一个数组中,然后利用其相应的构造方法将数组元素的各项显示出来。16.4.9列表(JList)JList是用来表示列表的组件。该组件与下拉列表不同,它可以显示多个项目的内容,并且允许用户从列表中选择一个或多个对象。JList的主要构造方法如图16.25所示。与下拉列表相同,可以将需要显示的内容先放入一个数组中,然后使用带有Object类型数组为参数的的构造方法创建一个JList对象,将列表中各项显示出来。16.4.10滚动条(JScrollPane)JscrollPane类的对象可以创建一个垂直或者水平方向的滚动条。在实际使用中,它需要和某个容器相关联。例如,表格、窗体等。JScrollPane类的构造方法如图16.27所示。16.5Swing高级组件16.4小节中我们介绍了Swing基本组件,但在实际应用中,对于一些比较复杂的界面,除了使用这些基本组件之外,还需要使用诸如表格、菜单、工具栏等这些组件。本节我们就来介绍Swing中的一些高级组件的创建和使用,包括表格、树、菜单,以及对话框等组件。16.5.1表格(JTable)表格(JTable)是Swing新增加的组件,主要是为了将数据以表格的形式显示。JTable是一个用来显示和编辑二维单元表格的组件。可以通过创建一个二维数组对象,并将二维数组中定义并初始化的值放入到表中。Jtable创建表格的主要构造方法如图16.29所示。