第7章图形用户界面的设计与实现.ppt
《第7章图形用户界面的设计与实现.ppt》由会员分享,可在线阅读,更多相关《第7章图形用户界面的设计与实现.ppt(73页珍藏版)》请在三一文库上搜索。
1、学习导读 首先,我们学习一些基本的图形编程知识,包括窗口的显示及外观设置、在窗口中显示文字和图像等; 接下来,介绍Java的事件处理机制,例如如何在程序中接收并处理如键盘按键和鼠标点击等“事件”; 最后,系统地介绍图形用户界面中常用组件的用法,如布局管理器、文本框、复选框、菜单、对话框等。,第七章 图形用户界面的设计与实现,教学重点与难点:,框架的组成及外观 在框架中显示文本和图形 字体和颜色的设置 Java的事件处理机制 窗口事件、焦点事件、键盘事件、鼠标事件的处理 Swing各种组件的用法,7.1 图形用户界面概述,Java1.0的出现带来了抽象窗口工具箱(AWT)。设计目标是希望构建一个
2、通用的GUI,使得利用它编写的程序能够运行在所有的平台上,以实现Sun公司提出的口号“一次编写,随处运行”。 在Java1.2中,Sun公司推出了新的用户界面库:Swing。相对AWT来说,Swing功能更强大、使用更方便,它的出现使得Java的图形用户界面上了一个台阶。 但是,Swing并没有代替AWT。在Java1.1中,AWT事件处理模型有了根本改变。Swing使用的仍然是Java1.1的事件处理模型。,7.2 简单图形用户界面,7.2.1 第一个图形用户界面,在Java中,顶层窗口称为框架。在AWT库中,对应于框架的类是Frame,在Swing库中,相应的类是JFrame。JFrame
3、类扩展了Frame类。大部分AWT组件在Swing中都有等价的组件,它们在表示形式上差一个“J”。 框架是一个容器,我们可以在这个容器中放入其他一些图形用户界面组件,如按钮、菜单等,从而组成一个功能完善的程序。,【例7.1】 显示一个空框架 import javax.swing.*; public class FirstFrame public static void main(String args) SimpleFrame frame = new SimpleFrame(); /设置用户关闭框架时的响应动作 frame.setDefaultCloseOperation(JFrame.EXI
4、T_ON_CLOSE); /显示该框架 frame.show(); class SimpleFrame extends JFrame public SimpleFrame() /设置框架大小 setSize(WIDTH, HEIGHT); public static final int WIDTH = 300; public static final int HEIGHT = 200; ,运行结果,7.2.2 框架外观,JFrame类的继承层次图,Component类是所有GUI对象的祖先,Window类是Frame类的父类,JFrame类直接从Frame继承而来。对于框架外观的操作比较重要的
5、方法如下: setIconImage窗口最小化(在Java中称为图标化)时,把一个Image对象用作图标。 setTitle设置窗口中标题栏的文字。 setResizable设置用户是否可以改变框架大小。 dispose方法关闭窗口,并回收该窗口的所有资源。 setLocation设置组件的位置。 setBounds重新设置组件的大小和位置。,【例7.2】 框架外观的设置 设置具有以下特征的框架: 它的高度和宽度为整个屏幕的1/3; 自定义窗口的标题和图标; 窗口的大小不可变。 程序代码见FrameSizeSet.java。运行结果如下:,图标,标题,最大化按钮失效,7.2.3 在框架中显示信
6、息,JFrame包含了四个窗格:RootPane、LayeredPane、GlassPane和ContentPane。如果需要将一些图形用户界面元素加入到框架中,我们需要在面板组件(JPanel)中进行绘制,然后将该面板组件加入到框架的内容窗格(ContentPane)中。相应的代码如下: /得到JFrame的内容窗格对象 Container contentPane = getContentPane(); Component c = .; /将组件加入到内容窗格中 contentPane.add(c); 面板JPanel类本身是容器,它可以容纳其他图形用户界面元素,如按钮、菜单等。,为了在面板
7、中进行绘制,需要重载JComponent类的paintComponent方法。 class MyPanel extends Jpanel public void paintComponent(Graphics g) super.paintComponent(g); ./相关的绘制代码 paintComponent方法是自动执行的,当窗口需要被重新绘制时,如用户缩放窗口,或还原已最小化的窗口时,系统就会自动调用该方法。 在框架中显示文本信息的方法: g.drawString(text, x, y),【例7.3】 在框架中显示信息 程序代码见HelloWorld .java。运行结果如下:,7.2
8、.4 文本和字体,通过Font类对象设置字体。 Font StringFont = new Font (“宋体”, Font.ITALIC, 20 ); 字体风格有以下几种选项: Font.PLAIN /常规 Font.BOLD /加粗 Font.ITALIC /倾斜 不同的系统中安装了不同的字体,为了得到本系统中所有已安装的字体,我们可以通过GraphicsEnvironment类的getAvailableFontFamilyNames方法来实现。该方法返回一个字符串数组,数组内包含所有可用的字体名。 【例7.4】显示系统中所有字体名。程序见ListFonts.java,【例7.5】字体设置
9、 采用“宋体”显示字符串“你好,Java!”,字体风格为加粗、倾斜,大小为20点。 程序代码见FontSet.java。运行结果如下:,7.2.5 绘制简单图形,利用Graphics类提供的一些方法进行简单图形的绘制。如:drawLine、drawPolyLine、drawPolygon、drawArc。 drawLine用来画线,调用格式: void drawLine(int x1, int y1, int x2, int y2) (x1, y1)和(x2, y2)为线的两个端点。 drawPolygon用来绘制多边形,调用格式: void drawPolygon(Polygon p) 参数
10、是多边形对象Polygon ,先定义Polygon对象,然后将点加入到该对象中,然后利用drawPolygon进行多边形的绘制: Polygon p = new Polygon; p.addPoint(x1, y1); p.addPoint(x2, y2); . g.drawPolygon(p);,【例7.6】简单图形的绘制 直线,弧,多边形的绘制。 程序代码见SimpleDraw.java。运行结果如下:,Java提供了矩形、圆角矩形、椭圆等基本形状的绘制方法: 矩形: void drawRect(int x, int y, int width, int height) 圆角矩形: void
11、 drawRoundRect(int x, int y, int width, int height, int arcWidth,int arcHeight) 椭圆: void drawOval(int x, int y, int width, int height) Java还提供了方便的填充封闭图形的方法,只需要将前面介绍的方法中的draw改为fill即可。如: void fillRect(int x, int y, int width, int height) void fillRoundRect(int x, int y, int width, int height, int arcW
12、idth,int arcHeight) void fillOval(int x, int y, int width, int height),7.2.6 颜色,Graphics类提供了与颜色相关的方法: getColor返回当前颜色设置。 setColor设置当前颜色。 setColor方法的调用格式为: void setColor(Color c) 我们可以选用Color类提供的13种标准颜色的预定义常数,也可以采用Color构建器来创建Color对象: Color(int redness, int greenness, int blueness) 参数redness,greenness,b
13、lueness分别表示红、绿、蓝的值,它们的值在0至255范围内。以下是颜色使用的例子: g.setColor(Color.green); g.drawString(“你好!”, 100, 100); g.setColor(new Color(128, 0, 128); /自定义颜色 g.drawString(“你好!”, 100, 200);,JFrame类的超类Component类提供的颜色操作的相关方法: setBackground设置背景色。 setForeground设置在组件上进行绘制的默认颜色。 【例7.7】 颜色设置 设置图形颜色,将框架背景颜色设置为桌面的颜色。 程序代码见C
14、olorRect.java。运行结果如下:,7.2.7 图像,通过Graphics类提供的drawImage方法实现图像的显示: public void paintComponent(Graphics g) . g.drawImage(image, x, y, null); 参数image封装了要显示的图像文件。通过Toolkit类的静态getDefaultToolkit方法,可以读取GIF文件和JPEG文件: String name = “test.gif”; Image image = Toolkit.getDefaultToolkit().getImage(name); 通过以上代码,可
15、以得到一个本地图像文件,如果要在网络上得到一个图像文件,必须使用URL类。相应的代码如下: URL url = new URL(“http:/ Image image = Toolkit.getDefaultToolkit().getImage(url);,【例7.8】显示图像 从本地加载一幅图像,并在窗口的中间显示。 程序代码见ImageShow.java。运行结果如下:,7.3 事件处理,7.3.1 事件处理原理,如果用户在用户界面执行了一个动作,这将导致一个事件的发生。事件是描述发生了什么的对象。在Java中,定义了各种不同类型的事件类,用来描述各种类型的用户操作。 事件是由事件源产生的
16、,事件的产生者称为事件源。例如,在Button组件上点击鼠标会产生以这个Button为源的一个事件:ActionEvent。 事件源拥有自己的方法,我们通过它向其注册事件监听器。事件监听器是一个类的实例,这个类实现了一个特殊的接口,称为Lintener interface。当事件源产生了一个事件以后,事件源就会发送通知给相应的事件监听器,监听器对象根据事件对象内封装的信息,决定如何响应这个事件。,我们可以通过以下方法来注册监听器对象: eventSourceObject.addEventListener(eventListenerObject); 以按钮类对例: MyActionListene
17、r listener = .; JButton button = new JButton(”提交”); button.addActionListener(listener); 监听器对象listener所属的类MyActionListener必须实现相应的接口,以响应事件: public class MyActionListener implements ActionListener . public void actionPerformed(ActionEvent event) /相应的响应操作 ,7.3.2 处理按钮点击事件,创建按钮: JButton MyButton = new JBu
18、tton(“Java”); 通过Container类的Add方法,将组件加入到该容器中。 class MyPanel extends JPanel public MyPanel() JButton MyButton = new JButton(“Java”); add(MyButton); 为按钮设置监听器。指定的监听器必须实现ActionListener接口的actionPerformed方法: public void actionPerformed(ActionEvent event),【例7.9】点击按钮 采用内部类ButtonAction充当事件监听器。 在面板中放置两个按钮,当用户点
19、击其中一个按钮时,面板中显示对应的操作。例如,如果点击“按钮一”,显示“您点击的是:按钮一” 。 程序代码见ButtonClick.java。运行结果如下:,7.3.3 捕获窗口事件,JFrame对象是窗口事件(WindowEvent)的事件源,我们要指定一个监听器对象: MyWindowListener listener = .; frame.addWindowListener(listener); 监听器对象要实现WindowListener接口。WindowListener接口中共有七个方法,它们分别对应七个窗口事件: public interface WindowListener vo
20、id windowOpened(WindowEvent e); void windowClosing(WindowEvent e); void windowClosed(WindowEvent e); void windowIconified(WindowEvent e); void windowDeiconified(WindowEvent e); void windowActivated(WindowEvent e); void windowDeactivated(WindowEvent e); ,WindowListener接口实现方法一: 定义一个类来实现WindowListener接
21、口,在感兴趣的方法中添加我们需要的代码,然后让其他方法为空即可。 class QuitWindow implements WindowListener public void windowClosing(WindowEvent e) System.exit(0); void windowOpened(WindowEvent e) void windowClosed(WindowEvent e) void windowIconified(WindowEvent e) void windowDeiconified(WindowEvent e) void windowActivated(Window
22、Event e) void windowDeactivated(WindowEvent e) ,WindowListener接口实现方法二: Java为每个具有多个方法的AWT监听器接口提供了一个适配器类。适配器类实现了监听器接口的所有方法,但是却不做任何实际工作。与WindowListener接口对应的WindowAdapter类实现了以上七个空方法,我们只需要通过扩展适配器类来实现我们感兴趣的方法。 class QuitWindow extends WindowAdapter public void windowClosing(WindowEvent e) System.exit(0);
23、【例7.11】捕获窗口事件 捕获窗口的关闭事件。 程序代码见WindowClosing.java。,7.3.4 AWT事件层次结构图,AWT事件类的继承关系图,AWT将事件分为两类: 语义(Semantic)事件 ActionEvent:对应按钮点击、菜单选择、列表框选择、在文本域中按回车键等。 AdjustmentEvent:用户调整滚动条。 ItemEvent:用户从一组选择框或者列表项中进行选择。 TextEvent:文本域或者文本框中的内容发生改变。 低级(Low-Level)事件 ComponentEvent:组件大小改变、移动、显示或者隐藏。 KeyEvent:键盘上的一个键被按下
24、或者释放。 MouseEvent:鼠标按键被按下、释放、鼠标移动或者拖动。 FocusEvent:组件获得焦点或者失去焦点。 WindowEvent:窗口被激活、屏蔽、最小化、最大化或关闭。 ContainerEvent:添加或者删除一个组件。,7.3.5 焦点事件,如果某个组件能够接收用户按键,那么该组件就拥有焦点。拥有焦点的组件在显示形式上与其他组件有一些差别:文本域内会显示光标;按钮四周会显示一个由虚线组成的矩形框。 可以捕获丢失的焦点事件来进行输入的合法性检查。如果输入不合法,通过调用requestFocus方法把焦点重新移回到该文本域,提示用户重新输入: public void fo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形 用户界面 设计 实现
链接地址:https://www.31doc.com/p-2567218.html