第6章图形用户界面.ppt
《第6章图形用户界面.ppt》由会员分享,可在线阅读,更多相关《第6章图形用户界面.ppt(61页珍藏版)》请在三一文库上搜索。
1、第六章 图形用户界面,本章讲解Java图形界面应用程序的一般设计方法,包括如何创建窗体、设计界面、管理布局、绘制图形、使用组件、事件编程等。 通过这一章的学习要求重点掌握图形用户界面应用程序的设计方法和编程技巧。,6.1 GUI编程基础,图形用户界面(GUI)使用户可以和程序进行可视化交互。无论是程序的设计者还是使用者都可以通过图形用户界面明显“看到”和“感觉”到程序的存在。图形用户界面为不同的应用程序提供了感觉上一致的用户界面组件,这样使用户在记住执行功能的复杂命令上花费较少的时间,而花更多的时间通过有效的方式来使用程序。 一个设计良好的软件通常包括业务层的逻辑设计和表现层的用户界面设计两大
2、部分。因此,好的用户界面设计对一个系统的成功是至关重要的。一个使用起来困难的界面,轻者会造成用户操作不便;重者引起用户反感,不管系统的功能如何而拒绝使用该软件系统。如果信息的表达方式是混乱的或是容易误解的,那么用户可能会误解信息的涵义。他们进行的一系列操作就有可能破坏数据,甚至导致灾难性的系统失败。,6.1.1 图形用户界面,计算机操作界面的发展从单调的命令行形式到图形化窗口形式,逐步形成了现在计算机用户认可的图形用户界面主要特征,主要集中在窗口、图标、菜单、指点、图形等方面。 用户界面设计的一般性原则包括:用户熟悉、一致性、意外最小化、可恢复性、用户指南、用户差异性等。 图形用户界面包含了许
3、多独立的显示元素,供用户交互。它们由程序中的GUI组件组成。GUI组件是用户通过键盘或鼠标进行交互的对象,菜单、按钮、文本域、标签和下拉列表框等GUI组件是图形用户界面的常用部分。,AWT和Swing,1. AWT AWT(Abstract Window Toolkit)是一个独立平台的窗口工具组件集,它依赖于对等组件(Peer),而对等组件是一个本地GUI组件,由AWT类管理。AWT的作用是给用户提供基本的界面组件,如按钮、列表框、菜单等。 AWT最初只包括与本地对等组件相关联的组件,称为重量组件(Heavyweight Component),这些组件在它们自己的本地不透明窗口中绘制,在改变
4、其默认行为时,不可以为其扩展子类,此外,它们必须是矩形的,且不能有透明背景。,2. Swing,Swing是建立在AWT基础之上的,它利用了AWT的底层组件,包括图形、颜色、字体、工具包和布局管理器等。使用AWT最好的部分来建立一个新的轻量组件集,而丢弃了AWT中有问题的重量组件部分。 通过引入新特性和丰富的功能,Swing提供了比AWT更全面的组件集合。Swing API是围绕实现AWT各个部分的API构建的,这保证了所有早期的AWT组件仍然可以使用。,11.2 常用组件(AWT),java.awt中的各个类,图形组件类的继承关系,6.1.2 Swing和ATW,Java类库中的ATW和Sw
5、ing包提供了大量的可视化组件,AWT组件是建立在对等模型的基础上的重量级组件;而Swing组件则是用纯Java编写的轻量级组件。 Swing带来了以下优势: 更丰富、更方便的用户界面元素集。 对底层平台的依赖更少,因此和平台有关的bug也少得多。 给不同平台上的用户一致的感觉。 AWT与Swing的结构关系以及Swing的组件关系,6.1.3 窗体容器,窗体(也叫Windows)是显示在用户终端桌面上的图形元素。窗体可以充当各种组件和控件的一个容器。Java中的窗体类容器可能是一个对话框(Dialog)、框架(Frame)或者是一个面板(Panel)等。 Java中的主要窗体类容器如下: J
6、Applet 通过启用Java 的Web浏览器或其他Apple 查看器运行的程序。 JDialog 汇集用户输入的模式或无模式窗口。 JFrame 顶层应用程序窗口。 JPanel 容纳部分界面的小型容器。反过来,该容器又可用于其他任何容器中,如 JFrame、JPanel、JApplet或JDialog组件。 AWT窗体 基于AWT的可视窗体。AWT窗体包括Applet、对话框、框架和面板。 AWT与Swing的结构关系以及Swing的组件关系,6.1.3 窗体容器,框架(JFrame)是种常用的顶层容器。框架的内部结构比较复杂,它可以划分为4种窗格:根窗格(Root Pane)、布局窗格(
7、Layered Pane)、内容窗格(Content Pane)和玻璃窗格(Glass Pane)。 对JFrame添加组件有两种方式:1、用getContentPane方法获得JFrame的内容窗格,再对其加入组件;2、建立一个JPanel之类的中间容器,把组件添加到容器中,用setContentPane方法把该容器置为JFrame的内容窗格。 面板(JPanel)有一个能够在上面进行绘制的表面,而且其本身也是容器。因此,它除了可以绘制图形、文字,还能容纳按钮、滑动条等其他用户界面元素。,1、用getContentPane方法获得JFrame的内容窗格,再对其加入组件: frame.getC
8、ontentPane().add(childComponent); 2、建立一个JPanel之类的中间容器,把组件添加到容器中,用setContentPane方法把该容器置为JFrame的内容窗格: JPanel contentPane=new JPanel( ); /把其它组件添加到JPanel中; frame.setContentPane(contentPane); /把contentPane对象设置成为frame的内容窗格,创建一个简单的JFrame主窗体,import javax.swing.*; import java.awt.*; public class SimpleFrame
9、extends JFrame public SimpleFrame(int width,int height) setSize(width,height); setTitle(“Frame主窗体“); Toolkit kit = Toolkit.getDefaultToolkit(); Dimension screenSize = kit.getScreenSize();/获取当前屏幕的尺寸 int x = (screenSize.width-width)/2; int y = (screenSize.height-height)/2; setLocation(x,y); setDefault
10、CloseOperation(JFrame.EXIT_ON_CLOSE); public static void main(String args) SimpleFrame frame = new SimpleFrame(400,300); frame.setVisible(true); ,为了在面板中绘制文字,我们需要定义一个扩展JPanel的新派生类,并覆盖paintComponent 方法。 paintComponent 方法实际上定义在JComponent中,这个类是所有非窗口swing组件的基类。该方法有一个Graphics类型的参数。Graphics对象存储了一个用于绘制图形和文本
11、的设计集合,包括字体和颜色等。JAVA中的所有绘制都必须使用Graphics对象。它拥有绘制图案,图象和文本的方法。 不管什么原因导致窗口需要重新绘制,事件处理器都会通知组件。它会引起所有组件的paintComponent方法执行。这就是说,该方法会自动调用,我们不必干涉这个自动过程。 导致窗口重新绘制,引发 paintComponent 方法的原因很多,例如:用户缩放窗口,窗口被遮盖,窗口重新显示等,如何向面板添加内容并置于框架中,import java.awt.*; import java.io.*; import javax.swing.*; import javax.imageio.*
12、; import .*; public class PanelFrame extends SimpleFrame /* Creates a new instance of PanelFrame */ public PanelFrame(int width,int height) super(width,height); public static void main(String args) PanelFrame frame=new PanelFrame(300,200); ContentPanel contentPanel=new ContentPanel( ); /把其它组件添加到面板中;
13、 contentPanel.add(new JButton(“OK“); frame.setContentPane(contentPanel); frame.setVisible(true); class ContentPanel extends JPanel /在面板中绘制图文; public void paintComponent(Graphics g) super.paintComponent(g); g.drawOval(120, 60, 150, 70);/绘制一个椭圆 try g.drawString(“这是一个面板!“,160,100);/绘制一行文字 Image image=I
14、mageIO.read(new URL(urlname); g.drawImage(image,30,30,null);/绘制一幅图片 catch ( IOException e ) g.drawString(“加载图形失败!“,100,100); String urlname=“http:/www.liu- ,java.awt.Window是AWT窗口组件中最基本的组件,它实际上是Frame与Dialog组件的超类。窗口组件没有边界、标题栏与菜单栏,而且大小不可以调整。 常用窗口实现的界面包括:产品信息的封面(如Outlook等软件启动时,显示在屏幕中间且几秒后自动消失的封面窗口),提示帮助
15、信息(如使用金山词霸等软件时,移动鼠标到某个英文单词上时自动弹出的解释信息)等。,AWT窗体组件,例 FrameDemo.java import java.awt.*; public class SplashDemo extends Frame Window window; public static void main(String args) SplashDemo frame = new SplashDemo(); public SplashDemo() window = new Window(this);,下面我们通过一个例子来学习如何使用窗口类:,Dimension scmSize =
16、 Toolkit.getDefaultToolkit().getScreenSize(); int width = 300; int height = 200; window.setLocation(scmSize.width/2-(width/2),scmSize.height/2-(height/2); window.setSize(width, height); window.show();,续1,window.toFront(); try Thread.currentThread().sleep(3000); catch (Exception e) e.printStackTrace(
17、); window.dispose(); System.exit(0); 这是个使用Window的窗口在屏幕上显示一个矩形窗口类的实例,这个窗口没有边界、标题栏与菜单栏,在屏幕上停留3秒后自动消失。如果在窗口中加载一幅图片,则能实现一个类似Outlook的封面窗口(在窗口中加载图片的方法我们将在第9章中学习)。,续2,程序中用到了工具类的方法Toolkit.getDefaultToolkit().getScreenSize()。Toolkit类是一个包含许多有用的本地工具方法的类。getScreenSize()方法的作用是取得显示器的像素尺寸。 程序的运行结果如图所示。,续3,续4,java.
18、awt.Frame是Window的一个子类,它是带有标题栏和边界的窗口,而且允许调整大小。另外,用户还可以为框架附加一个菜单栏。用户在程序设计过程中,当程序窗口需要图表化或者需要包含菜单栏时,则可以选择使用框架组件。 构造一个框架后,可以用add()方法来给框架添加组件。框架的缺省布局管理器属性是BorderLayout。可以用setLayout()方式来改变布局管理器属性。,框架(Frame),框架类中的Frame(String)构造方法创建一个由String规定标题的新的不可见的框架对象。 例 FrameDemo.java import java.awt.*; public class F
19、rameDemo extends Frame public FrameDemo(String title) super(title); public static void main(String agrs) FrameDemo frame = new FrameDemo(“Demo Frame“);,续1,frame.setLocation(100, 100); frame.setSize(500, 200); frame.setVisible(true); 程序的运行结果如图所示,它是一个具有标题、大小及背景颜色的框架。,续2,图,续3,java.awt.Dialog也是Window的扩展
20、类。与框架相同的是,对话框也拥有边界与标题栏,而且也可以调整大小;而与框架不同的是,对话框不支持附加菜单栏,而且对话框可以模式化属性设置,这是窗口和框架都不允许的。因此,如果用户在程序设计过程中需要创建一个临时窗口与用户交换信息时,使用模式对话框是最方便的。另外,AWT中还提供了Dialog类的一个常用的扩展类FileDialog(文件对话框)。它可以为用户选择一个待打开或保存的文件。,对话框(Dialog),可以说对话框是介于窗口和框架之间的,对话框和框架相比各有特色。我们来看一个典型的对话框的例子。 例 DialogDemo.java import java.awt.*; public c
21、lass DialogDemo public static void main(String agrs) Frame frame = new Frame();,续1,Dialog dialog = new Dialog(frame, “Demo Dialog“, false); dialog.setLocation(100, 100); dialog.setSize(500, 100); dialog.setVisible(true); 程序运行结果如下图所示。,续2,续3,文件对话框是文件选择设备的一个实现。它有自己的自由窗口以及窗口元素,并且允许用户浏览文件系统,以及为以后的操作选择一个特
22、定的文件。例如: 例 FileDialogDemo.java import java.awt.*; public class FileDialogDemo public static void main(String args) Frame parentFrame = new Frame();,续4,FileDialog d = new FileDialog(parentFrame, “FileDialog“); d.setVisible(true); / block here until OK selected String fname = d.getFile(); 程序的运行结果如下图所示
23、。,续5,图 8.5,续6,通常情况下,并不需要处理FileDialog的事件。上例中,调用setVisible(true)将阻塞事件,直至用户选择OK,这时,对话框会请求用户选择文件名,这个信息将作为一个String类型返回。,续7,6.2 图形与绘图,在Java中用于绘制文字、图形、图像的是Graphics类,并通过图形组件的paintComponent方法实现绘制工作。 我们通常把Graphics称为与Swing组件关联的图形上下文(graphic context),因为它包含了各种绘图的方法。 Graphics是抽象类,不能直接创建Graphics对象,只能通过JPanel或JComp
24、onent的派生类得到一个Graphics对象。,6.2.1 坐标系统,图形上下文使用一个简单的坐标系统,这个坐标系统中的每个图形元素(像素)用x和y的坐标来表示。坐标系统的原点,其坐标为(0,0),位于组件的左上角。x坐标表示一个点与原点的水平距离,y坐标表示一个点与原点的垂直距离。x坐标从左到右增大,y坐标从上到下增大,Color redColor=new Color(255,0,0);/红色 Color redColor=Color.RED;/红色,6.2.2 颜色,Java中有专门处理颜色的类Color。 Java的颜色是根据RGB值来建立的。RGB值是用于指定红色、绿色和蓝色这3个分
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形 用户界面
链接地址:https://www.31doc.com/p-2094322.html