《Java程序设计》重庆交大206:43上一章内容回顾8.面向对象:使用Java类库常用类Object类,String、StringBuffer和StringBuilder类Math类,Random类与用户互动运行Java程序的参数使用Scanner、BufferedReader获取键盘输入系统相关:System类、Runtime类基本类的包装类基本数据类型及对应的包装类,自动装箱和自动拆箱处理对象打印对象和toString方法,==和equals比较运算符306:439.GUI编程:使用Swing和创建Swing界面9.1创建GUI应用程序9.1.1创建界面9.1.2开发框架9.1.3创建组件9.1.4将组件加入到容器中9.2使用组件图标、标签、文本框、文本区域、可滚动窗格复选框和单选按钮、组合框、列表9.3Swing的特性标准对话框、滑块、可滚动窗格、工具栏进度条、菜单、选项卡窗格406:439.GUI编程:使用Swing和创建Swing界面图形用户界面(GUI,GraphicalUserInterface)由文本框、按钮、滑块、滚动条等小部件组成。Java类库包含的Swing包,能够提供GUI,并接收来自键盘、鼠标和其他输入设备的用户输入。使用Swing可以创建包含如下GUI组件的应用程序。框架:可以包含标题栏、菜单栏以及最大化、最小化和关闭按钮的窗口。容器:可包含其他组件的界面元素。按钮:可单击的区域,包含指出其用途的文本或图形。标签:提供信息的文本或图形。文本框和文本区域:接收键盘输入以及让用户能够编辑文本的窗口。下拉式列表:可从下拉式菜单或滚动窗口中选择的一组相关项。复选框和单选按钮:小框或圆圆,可被选中或取消选中。图标:可加入到按钮、标签和其他组件中的图形。可滚动的窗格:用于放置用户界面容纳不下的组件,包含滚动条,可用于查看全部组件。506:439.1创建GUI应用程序Swing让您能够使用操作系统(如Windows、Linux)风格或Java特有风格来创建Java程序的界面。这些风格被称为外观,因为它们描述了界面的外观及其组件的功能。Java7新增了独特的外观Nimbus,这是Java特有的。Swing组件位于javax.swing包中,这个包是Java类库中的标准组成部分。要通过Swing类的名称(即无需指定包名)引用它们,必须用import语句导入该类或用下面的方式导入整个包:importjavax.swing.*;用于支持GUI的其他两个包分别是java.awt(AbstractWindowToolkit)和java.awt.event(处理用户输入的事件处理类)。使用Swing组件时,实际操纵的是该组件类的对象。您通过调用构造函数来创建组件,然后调用相应的方法来正确地设置组件。606:439.1创建GUI应用程序所有Swing组件都是抽象类JComponent的子类,后者包含用于设置组件大小、修改背景颜色、定义文本字体等方法。Swing类与AWT的很多超类相同,因此可以在同一个界面中同时使用Swing和AWT组件。然而,在有些情况下,这两种组件不能在容器中正确显示,因此最好只使用Swing组件——每个AWT组件都有相应的Swing版本。Swing为所有的AWT组件提供了对应实现(除了Canvas组件之外;因为Swing中无须继承Canvas组件),通常在AWT组件的组件名前添加“J”就变成了对应的Swing组件([8],第3版,P443)。例如,AWT中的框架类为Frame,而Swing中的框架类为JFrame。组件必须添加到容器(container)中后,才能显示在用户界面上。容器是可以放置其他组件的组件。Swing容器是java.awt.Container的子类,包含用于在容器中添加或删除组件、使用布局管理器来排列组件以及设置容器边框的方法。容器通常可放置到其他容器中。706:439.1创建GUI应用程序806:439.1创建GUI应用程序9.1.1创建界面要创建Swing应用程序,首先要创建一个表示主GUI的类。这个类的对象将用作容器,用于放置要显示的其他所有组件。在很多项目中,主界面对象都是框架(JFrame类)。框架是用户在计算机上启动应用程序时显示的窗口,无论该程序是使用哪种语言编写的。框架包含如下元素:标题栏;最小化、最大化和关闭按钮;其他元素。创建JavaGUI应用程序的方式之一是:将界面声明为JFrame的子类,如下面的类声明所示:publicclassFeedReaderextendsJFrame{//}这个类的构造函数需完成下列几项工作:调用超类的构造函数,给框架指定标题以及完成其他设置;设置框架的大小,指定宽度和高度(单位为像章)或让Swing选择合适的大小;决定用户关闭窗口时如何办;显示框架。906:439.1创建GUI应用程序9.1.1创建界面JFrame类包含简单的构造函数JFrame()和JFrame(String),前者将框架的标题栏设置为空,后者将其设置为指定文本。也可以通过调用框架的setTitle(String)方法来设置标题。框架的大小可以通过调用setSize(int,int),并将宽度和高度作为参数来设置。框架大小的单位为像素,因此调用setSize(650,550)将创建一个宽650像素、高550像素的框架。【注意】也可以调用方法setSize(Dimension)来设置框架的大小。Dimension是java.awt包中的一个类,表示用户界面组件的宽度和高度。调用构造函数Dimension(int,int)来创建一个Dimension对象,它表示参数指定的宽度和高度。1006:439.1创建GUI应用程序9.1.1创建界面另一种设置框架大小的方式是,将框架要包含的组件加入其中,再调用框架的pack()方法。这将根据框架包含的组件的大小相应地调整框架的大小。如果框架过大,pack()将其缩小到刚好能够显示其中的组件;如果框架过小,或没有设置大小,pack()将其扩大到刚好能显示其中的组件。刚创建时框架不可见。可以调用方法show()(不提供任何参数)或方法setVisible(true)来使之可见。如果要在创建时显示框架,可在构造函数中调用上述两个方法之一。1106:439.1创建GUI应用程序9.1.1创建界面默认情况下,框架显示后将放在计算机桌面的左上角。可以通过调用方法setBounds(int,int,int,int)来指定其位置,该方法的前两个参数是框架左上角的(x,y)坐标,后两个参数是框架的宽度和高度。另一种设置框架位置和大小的方式是,使用java.awt包中的Rectangle对象。为此,可首先使用构造函数Rectangle(int,int,int,int),其中前两个参数是左上角的(x,y)坐标,后两个参数是宽度和高度;然后调用setBounds(Rectangle)在指定位置绘制框架。下面的例子演示了创建一个300×300的框架,其标题为“EditPayroll”:publicclassPayrollextendsjavax.swing.JFrame{publicPayroll(){super(EditPayroll);setSize(300,300);setVisible(true);}}1206:439.1创建GUI应用程序9.1.1创建界面每个框架的标题栏上都有最大化、最小化和关闭按钮。框架的方法setDefaultCloseOperation()决定用户关闭窗口时执行怎样的操作,其参数为JFrame类的下述4个静态变量之一:EXIT_ON_CLOSE:框架关闭时退出程序。DISPOSE_ON_CLOSE:框架关闭时释放Java虚拟机内存中的框架时象,并继续运行应用程序。DO_NOTHING_ON_CLOSE:让框架打开并继续运行程序。HIDE_ON_ClOSE:关闭框架并继续运行程序。要禁止用户关闭框架,可在其构造函数中添加如下语句:setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);如果创建的框架将用作应用程序的主用户界面,则其行为可能是EXIT_ON_ClOSE;关闭框架,然后结束应用程序。【注意】EXIT_ON_CLOSE关闭整个Java虚拟机,因此只应在用作应用程序主窗口的框架中使用它。如果需要在关闭框架后执行其他操作,应使用DISPOSE_ON_CLOSE或HIDE_ON_CLOSE。1306:439.1创建GUI应用程序9.1.1创建界面使用Java编程时可定制用户界面的整体外现。外观是由javax.swing包中的UIManager类管理。要设置外观,可调用类方法setLookAndFeel(String),并将外现类的名称作为参数。下面的代码演示了如何将外观指定为Java新增的Nimbus:UIManager.setLookAndFeel(com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel);应将上述方法调用放在try-catch块内,因为它可能引发5种不同的异常。在不支持Nimbus的环境中,可捕获Exception异常并忽略它,这样将使用默认外观。1406:439.1创建GUI应用程序9.1.1创建界面【提示】关于Java支持的外观风格,可参考程序:chapter09\SwingComponent.java([8],第3版,12.2节示例程序),该程序运行后可通过右键菜单来选择5种不同风格之一,其运行界面如下图所示。1506:439.1创建GUI应用程序9.1.2开发框架本章的第一个项目是一个这样的应用程序:显示一个不包含任何界面组件的框架。在NetBeans中新建一个空Java文件,将其命各为SimpleFrame,并输入以下程序。这个应用程序显示一个300×300像素的框架。这个类可用作任何GUI应用程序的框架(Framework)。程序清单:chapter09\SimpleFrame.java1606:439.1创建GUI应用程序9.1.3创建组件创建GUI是一种非常不错的获得Java对象使用经验的途径,因为每个界面组件都有时应的类。要使用界面组件,可以创建该组件类的一个对象,前面已经使用过容器类JFrame。最容易使用的组件之一是JButton,它表示可单击的按钮。Swing按钮可以有文本标签、图形图标或兼而有之。按钮类的构造函数包括如下三个。JButton(String):创建一个带指定文本的按钮。JButton(Icon):创建一个包含指定图标的按钮。JButton(String,Icon):创建一个包含指定文本和图标的按钮。下面的语句创建了3个包含文本标签的按钮:JButtonplay=newJButton(Play);JButtonstop=newJButton(Stop);JButtonrewind=newJButton(Rewind);1706:439.1创建GUI应用程序9.1.4将组件加入到容器中显示用户界面组件(如按钮)之前必须将它加入到容器中,然后显示容器。要将组件加入到简单容器中,可以调用容器的add(Component)方法,并将该组件作为参数(Swing中的所有用户界面组件都是从Java.awt.Componet派生而来的)。最简单的Swing容器是面板(JPanel类)。下面的代码创建了一个按钮并将它加入到面板中:JButtonquit=newJButton(Quit);JPanelpanel=newJPanel();panel.add(quit);将组件加入到框架和窗口中的方法与此相同。1806:439.1创建GUI应用程序9.1.4将组件加入到容器中以下程序中的ButtonFrame类扩展了本章前面创建的应用