图形用户界面的设计与实现课件.ppt

上传人:牧羊曲112 文档编号:3004746 上传时间:2023-03-08 格式:PPT 页数:64 大小:166KB
返回 下载 相关 举报
图形用户界面的设计与实现课件.ppt_第1页
第1页 / 共64页
图形用户界面的设计与实现课件.ppt_第2页
第2页 / 共64页
图形用户界面的设计与实现课件.ppt_第3页
第3页 / 共64页
图形用户界面的设计与实现课件.ppt_第4页
第4页 / 共64页
图形用户界面的设计与实现课件.ppt_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《图形用户界面的设计与实现课件.ppt》由会员分享,可在线阅读,更多相关《图形用户界面的设计与实现课件.ppt(64页珍藏版)》请在三一办公上搜索。

1、图形用户界面的设计与实现,7,7.1 图形用户概述;7.7 单、复选按钮;7.2 用户自定义成份;7.8 滚动条;7.3 Java的事件处理;7.9 鼠标、键盘;7.4 GUI标准组件;7.10 布局设计;7.5 标签、按钮;7.11 Panel与容器事件;7.6 文本与文本事件;7.12 Frame与窗口事件;,图形用户界面的设计。,7.1,一、GUI的定义:使用图形的方式借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系统发出命令,启动操作,并将系统运行的结果同样以图形方式显示给用户。二、Java的AWT库:abstract windows toolkit。三、图形用户界面的

2、构成:是一组图形界面成份和界面元素的有机组合。四、容器:用来组织其它界面成份和元素的单元。五、控制组件:是图形用户界面的最小单位。六、用户自定义成份:是用户绘制的几何图形、图案组成的,它们只起装作用,不能响应事件。,用户自定义成份。,7.2,一、Graphics类与用户自定义成份:Graphics类提供了很多绘制图形和文字的方法。这些方法主要是通过方法:paint(Graphics g)来实现的。在这里要注意图形坐标与平面坐标的区别。二、绘制简单图形:1、画直线:方法是:void drawLine(int startx,int starty,int endx,int endy);(讲例Line

3、demo.java)2、画矩形:方法是:void drawRect(int top,int left,int width,int height);void fillRect(int top,int left,int width,int height);,2、画矩形:方法是:void drawRect(int top,int left,int width,int height);void fillRect(int top,int left,int width,int height);void drawRoundRect(int top,int left,int width,int height,

4、int xDiam,int yDiam);void fillRoundRect(int top,int left,int width,int height,int xDiam,int yDiam);void draw3DRect(int top,int left,int width,int height,boolean d);void fill3DRect(int top,int left,int width,int height,boolean d);(讲例:Rect.java),3、画圆和椭圆:方法是:void drawOval(int x,int y,int width,int heig

5、ht);void fillOval(int x,int y,int width,int height);(讲例:Ellipse.java),4、画弧:方法是:void drawArc(int x,int y,int width,int height,int startAngle,int endAngle);void fillArc(int x,int y,int width,int height,int startAngle,int endAngle);(讲例:Arcs.java),5、画多边形:方法是:void drawPolygon(int x,int y,int numpoints);v

6、oid fillPolygon(int x,int y,int numpoints);(讲例:HourGlass.java和HourGlass1.java),三、绘制文本:Graphics类提供了三个与绘制文本有关的方法:drawByte()、drawChars()、drawString()。这三个方法一般要和Font、FontMetrics类一起使用。用Font类可以设定字体、字体的样式及大小;用FontMetrics则可以记录和获取当前字体的规格等说明。Font类有关的方法有:Font(String name,int style,int size):创建字体;setFont(Font ob

7、j):设置字体;getFont():获得当前Graphics上所使用的字体;String getFontList():返回当前系统可用字体名称数组;getSize()、getStyle()、isPlain()、isBold()、isItalic();(讲例SampleFonts.java和ShowFonts.java),四、设置颜色:Java的颜色类:Color允许用户任意选择自己所需要的颜色。Color类中定义了一些常用的颜色实例,如下表所示:,Color类中提供了以下方法:Color(int red,int green.int blue);Color(int rgbValue);Color

8、(float red,float green,float blue);setForeground();setBackground();setColor();getColor();getRed()、getGreen()、getBlue()、getRGB()。(讲例:ColorBar.java),五、显示图像:Java中处理图像的类是:Image,它也是AWT中的类库之一。Java目前支持的图像格式有:GIF和JPEG两种。对图像操作一般可为三步:创建、加载和显示。1、图像的创建:可利用以下方法:Image createImage(ImageProducer imgProd);Image crea

9、teImage(int width,int height);2、图像的加载:可利用以下方法:Image getImage(URL url);Image getImage(URL url,String imageName);3、图像的显示:利用的方法为:boolean drawImage(Image imgObj,int x,int y,ImageObserver imgOb);其中:imgOb是一个ImageObserver接口对象,它用来监测图像加载的过程。(讲例:SimpleImageLoad.java),六、动画制作:Java不仅提了对图形、图像的支持,而且还允许用户实现连续图像的播放,

10、即动画技术。Java对动画的处理是:首先动画图像一次性从网络上下载完毕或在不影响动画效果的前提下分若干次下载,下载后的图像存放于数组或向量中,用一指针顺序提取,然后逐一显示到屏幕上。当然动画制作过程中会出现一些意想不到的效果。闪烁便是其中之一。克服它的技术有二:一是改写update()方法,内定的update()方法是先清除整个画面,然后再调用方法paint()显示图像,改写之后的update()方法为:public void update(Graphics g)paint(g);二是利用双缓冲技术,双缓冲技术如下:,1、在图形缓冲区内创建将要使用的图形对象:offscreenimage;2、

11、在Applet的init()方法中,实例化offscreenimage对象;3、将要画到屏幕上的图像,转画到offscreenimage上;4、将offscreenimage上的图像,一次性的画到Applet的画面上;5、改写update()方法。(讲例:Animation.java),Java的事件处理。,7.3,一、Java事件处理机制:事件委托处理。事件处理是GUI编程的核心,Java中的事件就是对象。Java.awt.event包中定义了丰富的事件类型层次。面向对象编程的一个基本原则就是让最适合完成任务的对象完成任务。指定一个对象处理组件事件的过程称为委托(delegation)。事件

12、处理对象称为听众(Listener)。要让组件的某个活动事件的处理委托给某个听众,就要执行这个组件的addActionListener()方法,传递所要听众的引用。每个组件类都针对该组件产生的每种事件有个addxxxListener()方法。如下面的程序:(ButtonDelegateTest.java),import java.awt.*;import java.awt.event.*;public class ButtonDelegateTest extends java.applet.Applet public void init()Button b=new Buttob(“I have

13、 a listener!”);add(b);ActionListener listener=new TestListener();b.addActionListener(listener);class TestListener implements ActionListener public void actionPerformed(ActionEvent e)System.out.println(“Listener here:the button was clicked.”);,上面的程序就使用了事件委托模型:听众:listener是一个实现了接口ActionListener的类对象。接口A

14、ctionListener很简单,只有一个方法,它的实现为:public interface ActionListener extends EventListener public abstract void actionPerformed(ActionEvent e);addActionListener()方法的声明要求听众参数实现这个接口:public void addActionListener(ActionListener listener);由于听众要实现这个接口,所以知道动作事件何时发生,系统可以安全地对听众调用actionPerformed()方法,因为听众必定有actionPe

15、rformed()方法。当然,事件也可以委托给自己,即自我包含类实现事件的听众,构造器把自己作为听众加进行。如:,import java.awt.*;import java.awt.event.*;public class SelfButton2 extends Button implements ActionListener public SelfButton2(String Label)super(label);addActionListener(this);public void actionPerformed(ActionEvent e)System.out.println(“Acti

16、on!”);,二、Java事件的类型:Java所有的事件类和处理事件的监听者接口都定义在java.awt.event包中,其中事件的层次为:,EventObject,AWTEvent,ActionEvent,TextEvent,AdjustmentEvent,ComponentEvent,ItemEvent,ContainerEvent,WindowEvent,FocusEvent,InputEvent,PaintEvent,MouseEvent,KeyEvent,三、Java事件的监听接口:在java.awt.event包中,有11个事件监听接口,每个接口内部都包含了若干处理相关事件的抽象方

17、法。每个事件类都有一个监听者接口与之相对应,而事件类的每个具体事件类型都有一个具体的抽象方法与之相对应,当事件发生时,这个事件将被封装成一个事件类的对象作为实现参数传递给与之对应的具体方法,由这个方法负责响应并处理发生的事件。如:与ActionEvent类相对应的接口为ActionListener,那么凡是处理ActionEvent事件的类都必须实现这个接口,重载actionPerformed()方法,并由这个方法处理事件。当然,InputEvent类由于它不对应具体事件,所以它没有接口;而MouseEvent类有两个接口与之相对应,一个是MouseListener,处理单击事件,另一个是Mo

18、useMotionListener,处理移动和拖动事件。,GUI标准组件概述。,7.4,GUI标准组件都定义在java.awt包中,它们的层次关系为:,Component,Button,Canvas,Container,Choice,Checkbox,TextComponent,Label,Scrollbar,List,Panel,ScrollPanel,Window,TextArea,TextField,Applet,Frame,Dialog,FileDialog,容器,组件名,使用基本组件的步骤为:1、创建基本组件;2、放置到合适位置;3、创建组件对象的监听者。由于Component类是所

19、有awt组件的抽象父类,它的常用方法为:public void add(PopupMenu popup):public Color getBackground():public Font getFont():public Color getForeground():public Graphics getGraphics():public void repaint():public void setBackground():public void setFont():public void setSize():public void setVisible():,标签、按钮与动作事件。,7.5,一

20、、标签(Label):它的常用方法有 Label():Label(String str):Label(String str,int alignment):其中alignment的取值为:LEFT、CENTER、RIGHT。public void setText(String str):public String getText():public int getAlignment():public void setAlignment(int alignment):它不能发生事件。(如例:LabelDemo.java),二、按钮(Button):它的作用是用来触发某个事件。按钮在屏幕上显示的外形依

21、赖于Java运行系统所在有具体平台,在AWT中用户无法改变按钮的外形,但在AWT中实现了一个标准按钮的外观和行为。用户可以通过调用它的方法来改变按钮的字体、文本、前景色和背景色。它的常用方法有:Button():Button(String str):public void setLabel(String str):public String getLabel():按钮可以引发动作事件:ACTION_EVENT,具体响应由实现了接口ActionListener的监听者的actionPerformed(ActionEvent e)方法实现。在该方法中,我们可以通过e.getSource()获取引发

22、动作事件的按钮的引用,也可以通过e.getActionCommand()方法获取按钮的标签或事先为这个按钮设置的命令名。(如例:BtnLabelAction.java和ButtonDemo.java),三、动作事件(ActionEvent):ActionEvent类只包含一个事件,即:ACTION_PERFORMED。能引发这个事件的动作有:点击按钮、双击列表框中的选项、选择菜单项、在文本框中按回车键等。ActionEvent类的主要方法有:1、public String getActionCommand():它返回引发动作事件的命令名。命令名可以通过setActionCommand()方法实

23、现。如:Button btn=new Button(“按钮标签”);btn=setActionCommand(“命令名”);btn.addActionListener(this);那么在监听者按口的方法可以是:public void actionPerformed(ActionEvent e)if(e.getActionCommand()=“命令名”),当然我们也可以不专门设置命令名,此时命令名就是对象的标签名。2、public int getModifiers():如果引发动作时,用户也按了功能键,那么此方法返回功能键。即:ALT_MASK、CTRL_MASK、SHIFT_MASK、META

24、_MASK.,文本框、文本域与文本事件。,7.6,Java中用于文本处理的基本组件有:TextFiled和TextArea,它们都是TextComponent类的子类。一、文本事件(TextEvent):TextEvent类只包含一个事件,即代表文本区域中文本变化的事件TEXT_VALUE_CHANGED,在文本域中改变文本时都将引发这个事件。二、文本域的创建:public TextField():public TextField(int cols):public TextField(String str):public TextField(String str,int cols):三、文本区

25、的创建:,public TextArea():public TextArea(int rows,int cols):public TextArea(String str):public TextArea(String str,int rows,int cols):四、公共文本部件的特性:public void setText(String newText):public String getText():public String getSelectedText():public int getSelectionStart():public int getSelectionEnd():publ

26、ic void Select(int selectionStsrt,int selectionEnd):public void selectAll():public void setEditable():public boolean isEditable():,五、文本域的特性:public void setEchoChar(char ch):public char getEchoChar():public boolean echoCharIsSet():public int getColumns():六、文本区的特性:public void appendText(String textToA

27、dd):public void insertText(String newText,int position):public void replaceText(String str,int start,int end):public int getColumns():public int getRows():七、事件响应:1、TextComponent的事件:TextEvent.,2、TextField的事件:TextEvent、ActionEvent;3、TextArea的事件:TextEvent.4、对TextEvent的处理过程为:textField1.addTextListener(t

28、his);而听众类需实现的方法为:public void textValueChanged(TextEvent e);也可以通过e.getSoure()获得引发事件的文本对象的引用。(讲例:TextFieldExample.java和TextComponentEvent.java),单、复选按钮,列表与选择事件。,7.7,一、选择事件(ItemEvent):ItemEvent类只包含一个事件,即代表选择项的选中状态发生变化的事件:ITEM_STATE_CHANGED。引发这个事件的动作有:1、改变列表框类List对象选项的选中或不选中;2、改变下拉列表框类Choice对象选项的选中或不选中;3

29、、改变复选按钮类Checkbox对象选项的选中或不选中;4、改变菜单项CheckboxMenuItem对象选项的选中或不选中;ItemEvent类的主要方法有:1、public ItemSelectable getItemSelectable():2、public Object getItem():3、public int getStateChange():ItemEvent.SELECTED、ItemEvent.DESELECTED.,二、复选按钮(Checkbox):1、创建复选按钮:public Checkbox():public Checkbox(String label):publi

30、c Checkbox(String label,boolean state):public Checkbox(String label,boolean initialState,CheckboxGroup group):2、检查和设置复选按钮的状态:用public boolean getState()方法。如:if(myCheckbox.getState()else 则public void setState(boolean state)用来设置状态。,3、监听复选按钮的变化:实现ItemListener接口。具体方法为:addItemListener(ItemListener):remove

31、ItemListener(ItemListener):ItemListener接口中有一个方法:public void itemStateChanged(ItemEvent evt).(CheckBoxExample.java),三、单选按钮(CheckboxGroup):单选按钮是复选框的特例,用户可以把一组复选框放置在同一个复选框组中就可以创建单选按钮组。创建复选框组的方法为:public CheckboxGroup():然后用户使用下列方法向复选组中加入单选按钮:public Checkbox(String label,boolean initialState,CheckboxGroup

32、 group):(RadioExample.java)用户可以使用对每个复选框调用getState()方法或对CheckboxGroup组调用getSelectedCheckbox().而getSelectedCheckbox()返回的是当前被选中的复选框的引用。单选按钮的事件响应和复选框一样。(RadioExample1.java),四、下拉列表框(Choice):它是多选一的界面1、创建下拉列表框:有创建和添加选项两个步骤。Choice size=new Choice();size.add(“10”);size.add(“20”);size.add(“30”);2、常用方法:public

33、int getSelectedIndex():public String getSelectedItem():public void select(int index):public void select(String item):public void add(String item):public void insert(String item,int index):,public void remove(int index):public void remove(String item):public void removeAll():3、事件响应:下拉列也产生ItemEvent事件,

34、所以实现ItemnListener即可。在方法:public void itemStateChanged(ItemEvent e)中,可以通过调用 e.getItemSelectable()获得引发当前事件的下拉列框的引用,然后再通过方法:getSelectedItem()获取具体的选择项。(TestChoice.java),五、列表框(List):它是多选多的界面1、创建列表框:有创建和添加选项两个步骤。List size=new List();size.add(“10”);size.add(“20”);size.add(“30”);它的构造方法:public List():public L

35、ist(int rows):public List(int rows,boolean multipleMode):,2、常用方法:public int getSelectedIndex():public int getSelectedindexs():public String getSelectedItem():public String getSelectedItems():public void select(int index):public void deselect(int index):public void add(String item):public void add(St

36、ring item,int index):public void remove(String item):public void remove(int index):3、事件响应:它产生两种事件,即:单击时的ItemEvent事件和双击时的ActionEvent事件。,通常在itemStateChanged(ItemEvent e)方法里,调用e.getItemSelectable()方法获得引发事件的列表框的引用,再利用列表框的getSelectedIndex()或getSelectedItem()就可以得到具体的项目。而在actionPerformed(ActionEvent e)方法里可

37、以利用 e.getSource()得到产生事件的列表框的引用。调用方法:e.getActionCommand()可以获得选项的字符串。但要注意:双击不能覆盖单击。(TestList.java),滚动条与调整事件。,7.8,一、调整事件(AdjustmentEvent):AdjustmentEvent类只包含一个事件,即代表组件状态发生连续变化的事件:ADJUSTMENT_VALUE_CHANGED。引发这个事件的动作有:1、操纵滚动条(Scrollbar)改变其滑块位置;2、操纵用户自定义的Scrollbar对象的子类组件,改变其滑块位置;AdjustmentEvent类的主要方法有:1、pu

38、blic Adjustable getAdjustable():获得引发事件的Scrollbar引用。2、public int getAdjustmentType:返回状态变化的类型,其值在:AdjustmentEvent.BLOCK_DECREMENT、AdjustmentEvent.BLOCK_INCREMENT、AdjustmentEvent.TRACK、AdjustmentEvent.UNIT_DECREMENT、AdjustmentEvent.UNIT_INCREMENT.3、public int getValue():返回滑块对应的当前数值。,二、滚动条(Scrollbar):1、

39、创建滚动条:public Scrollbar():public Scrollbar(int orientation):public Scrollbar(int orientation,int position,int pageIncrement,int mininum,int maxinum):其中orientation的取值为:Scrollbar.HORIZONTAL、Scrollbar.VERTICAL.2、常用方法:public void setUnitIncrement(int increment):public int getUnitincrement():public void s

40、etBlockIncrement(int increment):public int getBlockIncrement():public int getMininum():、public int getMaxinum():public void setValue(int increment):、public int getValue():,3、使用滚动条:Scrollbar类产生AdjustmentEvent事件,并将事件发送给实现AdjustmentListener接口的对象。接口AdjustmentListener内唯一方法为:public void adjustmentValueCha

41、nged(AdjustmentEvent evt).在该方法内,通过对象evt的方法调用来实现事件响应。如:evt.getAdjustable():evt.getValue():evt.getAdjustmentType()的返回值与下列常量比较:AdjustmentEvent.BLOCK_DECREMENT:AdjustmentEvent.BLOCK_INCREMENT:AdjustmentEvent.TRACK:AdjustmentEvent.UNIT_DECREMENT:AdjustmentEvent.UNIT_INCREMENT:即可知发生的事件。(TestSlider.java),画

42、布与鼠标、键盘事件。,7.9,一、鼠标事件(MouseEvent):在Java 2中有两个不同的接口用于处理鼠标事件,即MouseListener和MouseMotionListener。在MouseListener中定义了与鼠标移动无关的方法,即:public abstract void mousePressed(MouseEvent e):public abstract void mouseReleased(MouseEvent e):public abstract void mouseClicked(MouseEvent e):public abstract void mouseEnte

43、red(MouseEvent e)public abstract void mouseExited(MouseEvent e):在MouseMotionListener中定义了与鼠标移动有关的方法,即:public abstract void mouseMoved(MouseEvent e):,public abstract void mouseDragged(MouseEvent e):MouseEvent类中封闭了若干个与鼠标有关的事件和常量。常量有:MOUSE_CLICKED:MOUSE_DRAGGED:MOUSE_ENTERED:MOUSE_EXITED:MOUSE_MOVED:MOU

44、SE_PRESSED:MOUSE_RELEASED:方法有:public int getID():返回上面的常量之一;public int getX():public int getY():,public Point getPoint():public int getClickCount():另外,也可以利用InputEvent类的方法getModifiers()的返回值与以下常量比较:ALT_MASK:CTRL_MASK:SHIFT_MASK:META_MASK:BUTTON1_MASK:BUTTON2_MASK:BUTTON3_MASK:从而得知按下的功能键或单击鼠标的那个键。(Respo

45、nseToMouse.java),二、键盘事件(KeyEvent):在Java 2中用于处理鼠标事件的接口为:KeyListener。在KeyListener中定义了与键盘有关的三个方法,即:public abstract void keyPressed(KeyEvent e):public abstract void keyReleased(KeyEvent e):public abstract void keyTyped(KeyEvent e):其中:keyTyped(KeyEvent e)方法是前现两个方法的组合。KeyEvent类的主要方法有:public char getKeyCha

46、r():public String getKeyText():KeyEvent类的主要常量有:KEY_PRESSED:KEY_RELEASED:KEY_TYPED:键盘被击。,三、画布(Canvas):画布类是一个没有特殊功能的部件。它主要用于创建自定义图形部件,在画布里可以像在Applet一样绘制各种图形,也可以响应事件。它的创建如:Canvas myCanvas=new Canvas();接着应用方法:size()来调整它的大小。它常用的方法为:public void paint(Graphics g).它响应的事件的鼠标和键盘事件。(TestCanvas.java),布局设计。,7.10

47、,在java的GUI界面中,每一个容器都有一个与之相连的布局管理器。我们可以用方法:setLayout()为之设置相应的布局管理器。布局管理的作用是为容器内的组件的排列提供咨询。setLayout()的完整表达为:void setLayout(LayoutManager LayoutObj)当容器增加组件、大小改变时都要根据LayoutObj来调整组件的设置。一、FlowLayout(流线型布局管理器):它的缺省的布局管理器,构造方法为:FlowLayout():FlowLayout(int how):FlowLayout(int how,int horz,int vert):参数how为对齐

48、方式,horz和vert规定了组件之间的行间距和列间距。(FlowLayoutDemo.java),二、BorderLayout(方位型布局管理器):它的构造方法为:BorderLayout():BorderLayout(int how,int horz,int vert):参数how为对齐方式,horz和vert规定了组件之间的行间距和列间距。当使用BorderLayout布局管理器时,要使用以下方法向容器中添加组件:Component add(String name,Component compObj):其中name为方位名,compObj为组件名。(BorderLayoutDemo.ja

49、va),三、GridLayout(网格型布局管理器):它的构造方法为:GridLayout():GridLayout(int numRows,int numCols):(GridLayoutDemo.java),四、CardLayout(卡片型布局管理器):它的构造方法为:CardLayout():CardLayout(int horz,int vert):另外在CardLayout类提供了在组件间转换了方法:void first(Container deck):void last(Container deck):void next(Container deck):void previous(

50、Container deck):void show(Container deck,String cardName):这里deck为容器名,cardName为卡片名。(CardLayoutDemo.java),五、GridBagLayout(网格袋型布局管理器):GridBagLayout与GridLayout一样,也是把容器分成网格单元。但GridBagLayout允许一个部件在必要时占用多个网格单元。所以用户在使用GridBagLayout给容器加部件之前,必须给GridBagLayout一个在何处放置部件的“建议”集。这个建议集是以类GridBagConstraints的形式给出的。Gri

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号