第8章Swing图形用户界面程序设计8.0:GUI概述Java语言提供两种图形用户界面,即AWT(早期版本)和Swing(增强了功能、减少了平台相关性)。
一方面:Swing图形用户界面比AWT图形用户界面可以克服更多的操作系统不同所带来的图形界面或交互方式上的差别;另一方面:Swing图形用户界面还增加了功能,可以定制指定的操作系统风格的图形用户界面。
8.1:组件和容器组件和容器是Swing图形用户界面的组成部分。
在Swing图形用户界面程序设计中,要求按照一定的布局方式将组件和容器的组合添加到给定的容器中。
这样,通过组件和容器的组合就形成图形用户界面。
然后通过事件处理的方式实现在图形界面上的人机交互。
8.1.1 整体介绍容器本身也是组件。
按组件和容器的用途来分:顶层容器、一般容器、专用容器、基本控件、不可编辑信息组件和可编辑组件。
1:顶层容器主要有三种:小应用程序(Applet和JApplet)、对话框(Dialog 和JDialog)和框架(Frame和JFrame)。
这三种容器在AWT图形用户界面中对应的类分别是java.applet.Applet、java.awt.Dialog和java.awt.Frame;在Swing图形用户界面中对应的类分别是javax.swing.JApplet、javax.swing.JDialog和javax.swing.JFrame,这些名称均以“J”开头。
小应用程序主要用来设计嵌入在网页中运行的程序;对话框通常用来设计具有依赖关系的窗口;框架主要用来设计应用程序的图形界面。
2:一般容器包括面板(Jpanel)、滚动窗格(JScrollPane)、分裂窗格(JSplitPane)、选项卡窗格(JTabbedPane)和工具条(JtoolBar)。
面板通常是只有背景色的普通容器;滚动窗格具有滚动条;分裂窗格是用来装两个组件的容器;选项卡窗格允许多个组件共享相同的界面空间;工具条通常将多个组件(通常是带图标的按钮组件)排成一列或一排。
3:专用容器包括内部框架(JInternalFrame)、分层窗格(JLayeredPane)和根窗格(JRootPane)。
内部框架可以在一个窗口内显示若干个类似于框架的窗口;分层窗格给窗格增加了深度的概念,当两个或多个窗格重叠在一起时,可以根据窗格的深度来决定显示哪一个窗格的内容,一般显示深度值较大的窗格。
根窗格一般是自动创建的容器,创建内部框架或者任意一种顶层容器都会自动创建根窗格。
根窗格由玻璃窗格、分层窗格、内容窗格和菜单窗格构成。
玻璃窗格是不可见的,只是用来解释各种输入事件;分层窗格为内容窗格和菜单窗格服务,主要用来管理各种相关深度值;内容窗格用来管理除菜单窗格之外的位于根窗格容器内的组件;菜单窗格不是必需的,主要用来管理菜单栏和菜单。
4:基本控件包括命令式按钮(JButton)、单选按钮(JRadioButton)、复选框(JCheckBox)、组合框(JComboBox)和列表框(JList)。
5:不可编辑信息组件包括标签(JLabel)和进度条等。
6:可编辑组件包括文本编辑框(JTextField)和文本区域(JTextArea)等。
8.1.2 JFrame和JLabel(一)框架(JFrame)是顶层的容器。
1框架的构造:可以通过类javax.swing.JFrame的构造方法(A-B)A: public JFrame ( ) throws HeadlessException创建一个不可见不含标题的的初始化框架。
B:public JFrame (String title ) throws HeadlessException创建一个不可见的初始化框架,其中title指定框架的标题内容。
新创建的框架需要进行属性设置才能正常工作。
2框架的属性设置:可以通过类javax.swing.JFrame的成员方法(A-C)A: public viod setDefaultCloseOperation (int operation)设置关闭框架的行为属性。
其中operation一般为常数JFrame.EXIT_ON_CLOSE,表示关闭框架时,则退出程序。
B: public viod setSize (int width,int height)设置框架的大小。
width和height分别对应框架的宽度和高度。
C: public viod setVisible (boolean b)设置框架是否可见。
当b为true时,框架变成可见,否则不可见。
一般需要调用该成员方法让初始不可见的框架变成可见的,而且应当在前面属性设置完毕以及添加完组件之后调用该成员方法,否则,框架的图形界面可能会出现不正常显示。
3给顶层容器添加组件的方法:一般是先获取顶层容器的内容窗格,再向内容窗格添加组件。
(1)可以通过类javax.swing.JFrame的成员方法public Container getContentPane ()返回当前框架的内容窗格。
(2)此时,还需要给内容窗格设置布局方式类java.awt.Container的成员方法public viod setLayout(LayoutManager mgr)将当前容器的布局方式设置为参数mgr指定的方式。
最常见的布局方式是FlowLayout。
通过类java.awt.FlowLayout的构造方法public FlowLayout (int align)可以创建FlowLayout的实例对象。
在FlowLayout 布局方式下,组件在容器中以行的形式从左到右依次排列,参数align指定行对齐方式(常见的取值有FlowLayout.LEFT、FlowLayout.CENTER、FlowLayout.RIGHT),分别对应左中右对齐。
(3)在设置布局方式之后可以给内容窗格容器添加组件类java.awt.Container的成员方法public Component add (Component comp)将组件添加到当前容器中。
(二)利用标签(JLabel)可以在图形用户界面上显示一个字符串或一幅图。
1标签的创建:可以通过类javax.swing.JLabel的构造方法(A-C)A: public JLabel (String text)B: public JLabel (Icon icon)C: public JLabel (String text, Icon icon, int horizontalAlignment)其中参数text指定标签的文字信息;参数icon指定标签的图标;参数horizontalAlignment指定文字和图标在水平方向上的对齐方式,常见的取值有常量JLabel.LEFT、JLabel.CENTER、JLabel.RIGHT,分别对应左中右对齐方式。
如果参数text为null,则该标签不含文字信息;如果参数icon为null,则该标签不含图标。
2设置标签的属性:可以通过类javax.swing.JLabel的成员方法(A-G)A: public void setText (String text)重新设置标签的文字信息,参数text指定标签的新的文字信息。
如果参数text为null,则该标签不含文字信息。
B: public void setIcon (Icon icon)重新设置标签的图标,参数icon指定标签的新图标。
如果参数icon为null,则该标签不含图标。
C: public void setHorizontalAlignment(int alignment)设置组成标签的文字与图标在水平方向上的对齐方式,参数alignment指定常见的取值有常量JLabel.LEFT、JLabel.CENTER、JLabel.RIGHT,分别对应左中右对齐方式。
D: public void setHorizontalTextPosition(int textPosition)设置组成标签的文字与图标在水平方向上的相对位置关系,参数textPosition 为常量JLabel.LEFT或JLabel.RIGHT时,文字分别位于图标的左侧或右侧;参数textPosition为常量JLabel.CENTER时,文字与图标在水平方向中对齐。
E: public void setVerticalAlignment(int alignment)设置组成标签的文字与图标在竖直方向上的对齐方式,参数alignment指定常见的取值有常量JLabel.TOP、JLabel.CENTER、JLabel.BOTTOM,分别对应左中右对齐方式。
F: public void setVerticalTextPosition(int textPosition)设置组成标签的文字与图标在水平方向上的相对位置关系,参数textPosition 为常量JLabel.TOP或JLabel.BOTTOM时,文字分别位于图标的上方或下方;参数textPosition为常量JLabel.CENTER时,文字与图标在竖直方向上中对齐。
G: public void setToolTipText(String text)设置当鼠标指针在标签上稍加停留时出现的提示信息,其内容为text指定的字符串。
8.1.3 JDialog和JOptionpane(一)对话框(JDialog)用来设计具有依赖关系的窗口,通常在已有的对话框上创建对话框,已有的对话框称为父窗口,新创建的称为子窗口。
1对话框的创建:可以通过类javax.swing.JDialog的构造方法(A-B)A: public JDialog (Dialog owner, String title, boolean modal)B: public JDialog (Frame owner, String title, boolean modal)参数owner指定对话框的父窗口,参数title指定当前对话框的标题,参数modal指定对话框的模式,其中A方法新创建对话框的父窗口也是对话框,B方法新创建对话框的父窗口是框架。
对话框的模式有两种:当modal为true时,新创建的对话框是有模式对话框(一般无法通过图形界面用户操作父窗口,而只能与作为子窗口的有模式对话框进行交互,在关闭有模式对话框后,其父窗口才回到激活的状态),否则是无模式对话框(无模式对话框与其父窗口都处于激活的状态,当关闭无模式对话框时,其父窗口仍然存在,但是当关闭其父窗口时,通常会自动关闭该无模式对话框)。
2设置对话框的大小和可见性属性:可以通过类javax.swing.JDialog的成员方法(A-B)A: public voidSetSize (intwidth,int height)设置对话框的大小,width和height分别对应框架的宽度和高度。