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

链接地址:https://www.31ppt.com/p-4787702.html