第6章图形用户界面设计基础通过学习4个案例,初步掌握Java语言中的图形用户界面的概念,以及创建容器、组件、指定布局和相应事件的方法,以及显示图片和播放音乐的基本方法。通过11个实例的制作,进一步掌握Java设计过程的基本方法和基本技巧。6.1【案例17】创建窗体案例效果编写一个程序Beijing,创建一个JFram窗口,并在其中显示“北京欢迎你!”和“WelcometoBeijing!”,如图6-1-1所示。通过该案例的学习,可以初步掌握如何在Java语言中实现图形用户界面,以及布局管理器的使用等内容。设计过程1、在记事本中输入如下程序内容importjava.awt.*;importjavax.swing.*;publicclassBeijing{publicstaticvoidmain(Stringargs[]){JFrameframe=newJFrame(2008年奥运会);frame.getContentPane().setLayout(newGridLayout(2,1));frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setBounds(100,100,250,150);JButtonmsg1=newJButton(北京欢迎您!);JButtonmsg2=newJButton(WelcometoBeijing!);frame.getContentPane().add(msg1);frame.getContentPane().add(msg2);frame.setVisible(true);}}相关知识1.图形用户界面和标准组件(1)图形用户界面简介:图形用户界面(GraphicsUserInterface,GUI)。它使用图形的方式,借助菜单、文本框、按钮等标准界面组件和鼠标及键盘的操作,帮助用户方便地向计算机系统发出指令,并将系统运行的结果同样以图形方式显示给用户。在图形用户界面(GUI)出现之前,用户需要输入命令,然后计算机再进行计算并输出结果。这种人机交流方式需要用户记忆大量的命令,并且操作烦琐、复杂、容易出错。对于计算机的初学者和一般用户来说,要掌握一种系统或者应用软件更是困难重重。例如,DOS操作系统虽然具有与Windows同样强大的文件管理功能,但是其普及程度远远不及后者,在很大程度上是因为DOS不具有图形用户界面。由此可见,一个友好的图形用户界面对于一个软件的重要性。图形用户界面是指包括文本框、标签、按钮、单选按钮、复选框、图片、菜单、对话框等组件的一个人机交互的界面。在该界面中,用户不需要记忆任何命令,通过单击、双击、拖动鼠标和简单的文字输入就可以轻松地操作计算机完成所有的任务。在Java语言中,可以自行设计程序的图形用户界面,使得程序运行效果更加直观、生动活泼。设计和实现图形用户界面的工作主要有以下3个方面。创建组件(Component):创建组成图形用户界面的各种元素。例如,文本框、标签、按钮、单选按钮、复选框、图片、菜单、对话框等。指定布局(Layout):设置各个组件在图形用户界面中的相应位置。响应事件(Event):定义当用户进行某些操作时,程序的执行情况,从而实现图形用户界面的人机交互功能。例如,当单击按钮、拖动鼠标或者在文本框中输入文字时,程序的反应。程序的反应结果一般也是通过图形用户界面显示出来。Java1.0中出现了用来生成图形用户界面的包是java.awt,简称抽象窗口工具集,即AWT(AbstractWindowToolkit)。它的设计目标是希望构建一个通用的GUI,使得利用它编写的程序能够运行在所有的平台上。(2)GUI标准组件:Java中构成图形用户界面的各种元素和成分可以分为两大类:容器和组件。容器(Container):容器是用来摆放图形用户界面中各种组件的一个矩形范围。一般说来,一个应用程序的图形用户界面必须有一个顶层容器,比如一个窗口。在容器中,可以放置各种组件或者其他容器,在新放置的容器内又可以放置各种组件或者其他容器,依此类推就构成一个复杂的图形界面系统。运行程序时,容器的显示位置和大小也就是该程序图形用户界面的显示位置和大小。用户可以自行设置位置和大小的绝对值,也可以依据其所含组件和其他容器的位置及大小来设置相对位置。容器通常都有一个背景,这个背景覆盖填充整个容器,可以是透明的,也可以使用指定的图案增加图形用户界面的生动性和个性化。组件(Compnent):组件是图形用户界面的基本组成单位,它不能包含任何其他的组件或者容器。组件的主要作用是接受用户的指令,显示输出结果,从而完成人机交流。组件的种类很多,例如,按钮、复选框、下拉菜单等。每一种组件都有其特定的属性,以及相对应的事件响应方式。在容器中的组件可以按一定的规则来放置,确定它们的相对位置关系和前后排列关系等。除了容器和组件这两大图形用户界面组成部分外,还有一些标志图案或者几何图形,这些主要是用来突出输出结果和美化组件的。它们不被系统识别,所以不能响应用户的操作,不具有交互功能。2.AWT和Swing在Java语言中,图形用户界面是通过java.awt包或者javax.swing包中的类来实现的。java.awt包一般简称为AWT,其含义是抽象窗口工具箱(AbstractWindowsToolkit);javax.swing包一般简称为Swing,它是Java基础类库(JavaFundationClass,JFC)中的一员。(1)AWT提供了多种标准的GUI组件,比如标签、文本框、按钮等,以及窗口、面板等容器。使用AWT的布局管理器,可以安排各个组件在容器中的位置。此外,还有前面介绍的绘制几何图形、设置文字字体、颜色等功能。在AWT中,专门有一组类用于响应并处理外部事件。JavaApplet程序就是属于AWT中的一种图形用户界面实现方法。实际上,AWT提供给编程人员的只是抽象的窗体界面系统,而在其内部会针对每种操作系统,分别使用不同的方式来实现图形用户界面。使用这种方式虽然加快了GUI的实现速度,但是因为每种操作系统的组件大小、文字字体和界面布局都不同,所以会造成同一个程序在不同系统中的图形用户界面效果不同。例如,在Mac机上设计的一个友好的程序图形用户界面,其效果如图6-1-2(a)所示,将该程序在PC机上运行得到的图形用户界面可能不尽如人意,其效果如图6-1-2(b)所示。为了解决AWT这个严重的缺陷,Sun公司在Java2(Java1.4)以后的版本中增加了javax.swing包。(2)Swing不仅包含了AWT中几乎所有的容器和组件,而且增加了很多新的容器和组件。因为AWT中的类已经使用了各个容器和组件的英文名称,所以Swing中的类需要在原有名称前加一个字母J,以示区别。例如,与AWT中Button类具有同样功能的Swing中的类称为JButton类。Swing中的所有组件都是“轻量级”的,很小巧的;而顶层容器则是“重量级”的,支持“可插入外观和效果”(LookandFeel)。也就是说,用户界面的外观可以在不同的平台和不同的操作系统上被动态地改变以符合用户的期望。例如,图6-1-3展示了4种不同的用户界面外观。图6-1-3Swing图形界面效果具有图形用户界面的Swing应用程序都具有至少一个顶层容器。Swing中共有4个顶层容器:JFrame、JDialog、JApplet和JWindow。3.JFrameJFrame是最简单最常用的Swing顶层容器,它含有一个内容框架(ContentPane)用来容纳所有的组件。对于菜单组件来说,既可以放置到内容框架内,也可以直接添加到JFrame上。这三者的层次关系如图6-1-4所示,其图形用户界面示意图如图6-1-5所示。JFrame的创建、设置和显示方法如下。JFrame菜单组件内容框架JLabelJButtonJFrame菜单组件内容框架JLabelJButton图6-1-4容器和组件的关系图6-1-5示意图(1)创建JFrame:创建JFrame对象的常用格式有以下两种。JFrame对象名=newJFrame();JFrame对象名=newJFrame(Strings);如果使用第二种创建形式,则在创建JFrame的同时,也设置了其窗口标题的内容。例如,下面的语句创建了一个JFrame对象f,且其窗口的标题为“欢迎学习Java语言”。JFramef=newJFrame(欢迎学习Java语言);(2)添加组件:因为大多数组件不可以直接添加到JFrame中,所以使用JFrame的对象调用其getContentPane()方法,返回一个Frame的内容框架(ContentPane)对象,然后再通过调用add()方法将组件对象添加到内容框架中,格式如下。JFrame对象名.getContentPane().add(组件对象名);(3)JFrame类中的方法pack()方法:将JFrame的窗口设置为根据其中所含的容器和组件的大小来决定,以能够容纳每个组件的最佳大小为准。setSize(w,h)方法:准确设置JFrame窗口的大小,其中w表示窗口的宽度,h表示窗口的高度。setBounds(x,y,w,h)方法:不仅可以准确设置JFrame窗口的大小,而且还可以准确设置JFrame窗口在屏幕中的位置,其中x表示窗口左上角的x轴坐标值,y表示窗口左上角的y轴坐标值,w表示窗口的宽度,h表示窗口的高度。setBackground(颜色参数)方法:改变JFrame容器的背景颜色。例如,下面的语句将背景颜色设置为蓝色。f.setBackground(Color.blue);setTitle(Strings)方法:设置窗口的标题。setDefaultCloseOperation(参数)方法:用来控制当JFrame窗口被关闭后,Swing应用程序的下一步操作。一般只使用JFrame.EXIT_ON_CLOSE作为参数,表示窗口被关闭后,自动结束程序运行。(4)显示JFrame窗口:完成所有JFrame的创建和设置后,需要执行显示JFrame窗口的语句,才可以在屏幕上看到程序运行后图形用户界面的效果。显示JFrame窗口的格式有两种,这两种格式的效果是完全一样的。JFrame对象名.setVisible(true);JFrame对象名.show();以上是创建和设置JFrame最常用的语句,下面的程序可以创建一个最简单的不含任何组件的JFrame窗口。importjavax.swing.*;//导入Swing包,以便使用其中的类publicclassExp{publicstaticvoidmain(Stringargs[]){JFramef=newJFrame();//创建容器JFrame的对象ff.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭后结束程序f.setBounds(100,100,300,200);//设置其在屏幕中的显示位置及大小f.setTitle(欢迎学习Java语言);//设置窗口的标题f.setVisible(true);//显示对象f}}将上面的程序保存在“我的Java程序”文件夹中,然后按照运行JavaApplication的方法输入命令运行程序,结果如图6-1-6所示。图6-1-6JFrame窗口4.JPanelJPanel是Swing中的一个第二层容器,其中可以添加各种组件,但是不能绘制图形,只能改变其背景颜色。(1)创建JPanel:创建JPanel的常用格式有以下两种。格式1:JPanel对象名=newJPanel();格式2:JPanel对象名=newJPanel(LayoutManager);如果使用第二种创建形式,则在创建JPanel的同时,也设置了其布局方式。因为不是所有的布局管理器都可以作为JPanel构造方法的参数,所以最好使用setLayout()方法来改变布局方式。