JAVA语言的图形用户界面的设计与实现_第1页
JAVA语言的图形用户界面的设计与实现_第2页
JAVA语言的图形用户界面的设计与实现_第3页
JAVA语言的图形用户界面的设计与实现_第4页
JAVA语言的图形用户界面的设计与实现_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、图形用户界面的设计一、GUI 的定义:使用图形的方式借助菜单、按钮等标准界面元素和鼠标操作,帮助用户向计算机系统发出命令,启动操作,并将系统运行的结果同样以图形方式显示给用户。二、Java 的AWT 库:abstract windows toolkit。三、图形用户界面的构成:是一组图形界面成份和界面元素的有机组合。 四、容器:用来组织其它界面成份和元素的单元。 五、控制组件:是图形用户界面的最小单位。六、用户自定义成份:是用户绘制的几何图形、图案组成的,它们只起装作用,不能响应事件。用户自定义成份一、Graphics 类与用户自定义成份:Graphics 类提供了很多绘制图形和文字的方法。这

2、些方法主要是通过方法:paint(Graphics g来实现的。在这里要注意图形坐标与平面坐标的区别。 二、绘制简单图形: 1、画直线:方法是:void drawLine(int startx,int starty,int endx,int endy; 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,i

3、nt 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;3、画圆和椭圆:方法是:void drawOval(int x,int y,int width,int height;void fillOval(

4、int x,int y,int width,int height;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;5、画多边形:方法是:void drawPolygon(int x,int y,int numpoints;void fillPolygon(int x,int y,int numpoints;三、绘制文本:Graph

5、ics 类提供了三个与绘制文本有关的方法: drawByte(、drawChars(、drawString(。这三个方法一般要和Font 、FontMetrics 类一起使用。用Font 类可以设定字体、字体的样式及大小;用FontMetrics 则可以记录和获取当前字体的规格等说明。Font 类有关的方法有:Font(String name,int style,int size:创建字体; setFont(Font obj:设置字体;getFont(:获得当前Graphics 上所使用的字体;String getFontList(:返回当前系统可用字体名称数组; getSize(、getSt

6、yle(、isPlain(、isBold(、isItalic(;四、设置颜色:Java 的颜色类:Color 允许用户任意选择自己所需要的颜色。Color 类中定义了一些常用的颜色实例,如下表所示: Color 类中提供了以下方法:Color(int color1,int color2,int color3;创建颜色 Color(int red,int blue; Color(int rgbValue;Color(float red,float green,float blue; setForeground(; setBackground(; setColor(; getC

7、olor(;getRed(、getGreen(、getBlue(、getRGB(。 五、显示图像:Java 中处理图像的类是:Image,它也是AWT 中的类库之一。Java 目前支持的图像格式有:GIF 和JPEG 两种。对图像操作一般可为三步:创建、加载和显示。1、图像的创建:可利用以下方法:Image createImage(ImageProducer imgProd; Image createImage(int width,int height; 2、图像的加载:可利用以下方法: Image getImage(URL url;Image getImage(URL url,String

8、imageName; 3、图像的显示:利用的方法为:boolean drawImage(Image imgObj,int x,int y,ImageObserver imgOb; 显示图像是通过Graphics 类的drawImage(实现的。其中: imgOb 是一个ImageObserver 接口对象,它用来监测图像加载的过程。六、动画制作:Java 不仅提了对图形、图像的支持,而且还允许用户实现连续图像的播放,即动画技术。Java 对动画的处理是:首先动画图像一次性从网络上下载完毕或在不影响动画效果的前提下分若干次下载,下载后的图像存放于数组或向量中,用一指针顺序提取,然后逐一显示到屏幕

9、上。当然动画制作过程中会出现一些意想不到的效果。闪烁便是其中之一。克服它的技术有二:一是改写update(方法,内定的update(方法是先清除整个画面,然后再调用方法paint(显示图像,改写之后的update(方法为:public void update(Graphics g paint(g; 二是利用双缓冲技术,双缓冲技术如下:1、在图形缓冲区内创建将要使用的图形对象:offscreenimage ; 2、在Applet 的init(方法中,实例化offscreenimage 对象; 3、将要画到屏幕上的图像,转画到offscreenimage 上;4、将offscreenimage 上

10、的图像,一次性的画到Applet 的画面上; 5、改写update(方法。Java 的事件处理一、Java 事件处理机制:事件委托处理。如下面的程序:public void init(Button b=new Buttob(“I have a listener!”; add(b;ActionListener listener=new TestListener(; b.addActionListener(listener; class TestListener implements ActionListener public void actionPerformed(ActionEvent e

11、上面的程序就使用了事件委托模型:听众:listener 是一个实现了接口ActionListener 的类对象。接口ActionListener 很简单,只有一个方法, 它的实现为:public interface ActionListener extends EventListener public abstract void actionPerformed(ActionEvent e; addActionListener(方法的声明要求听众参数实现这个接口: public void addActionListener(ActionListener listener;由于听众要实现这个接口,

12、所以知道动作事件何时发生,系统可以安全地对听众调用actionPerformed(方法,因为听众必定有actionPerformed(方法。当然,事件也可以委托给自己,即自我包含类实现事件的听众,构造器把自己作为听众加进行。如:public class SelfButton2 extends Button implements ActionListener public SelfButton2(String Label super(label;addActionListener(this; 三、Java 事件的监听接口:如:与ActionEvent 类相对应的接口为ActionListener

13、 ,那么凡是处理ActionEvent 事件的类都必须实现这个接口,重载actionPerformed(方法,并由这个方法处理事件。当然,InputEvent 类由于它不对应具体事件,所以它没有接口;而MouseEvent 类有两个接口与之相对应,一个是MouseListener ,处理单击事件,另一个是MouseMotionListener ,处理移动和拖动事件。GUI 标准组件概述 使用基本组件的步骤为:1、创建基本组件;2、放置到合适位置;3、创建组件对象的监听者。 由于Component 类是所有awt 组件的抽象父类,它的常用方法为: public void add(PopupMen

14、u 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(:标签、按钮与动作事件一、标签(Label ):它的常用方法有Label(:Label(String str:Label(Strin

15、g str,int alignment:其中alignment 的取值为:LEFT 、CENTER 、RIGHT 。public void setText(String str:public String getText(:public int getAlignment(:public void setAlignment(int alignment:它不能发生事件。二、按钮(Button ):它的作用是用来触发某个事件。按钮在屏幕上显示的外形依赖于Java 运行系统所在有具体平台,在AWT 中用户无法改变按钮的外形,但在AWT 中实现了一个标准按钮的外观和行为。用户可以通过调用它的方法来改变按

16、钮的字体、文本、前景色和背景色。它的常用方法有:Button(:Button(String str:public void setLabel(String str:public String getLabel(:按钮可以引发动作事件:ACTION_EVENT,具体响应由实现了接口ActionListener 的监听者的actionPerformed(ActionEvent e 方法实现。在该方法中,我们可以通过e.getSource(获取引发动作事件的按钮的引用,也可以通过e.getActionCommand(方法获取按钮的标签或事先为这个按钮设置的命令名。三、动作事件(ActionEvent

17、 ):ActionEvent 类只包含一个事件,即:ACTION_PERFORMED。能引发这个事件的动作有:点击按钮、双击列表框中的选项、选择菜单项、在文本框中按回车键等。ActionEvent 类的主要方法有:1、public String getActionCommand(:它返回引发动作事件的命令名。命令名可以通过setActionCommand(方法实现。如:Button btn=new Button(“按钮标签”;btn=setActionCommand(“命令名”;btn.addActionListener(this;那么在监听者按口的方法可以是:public void acti

18、onPerformed(ActionEvent eif(e.getActionCommand(=“命令名”当然我们也可以不专门设置命令名,此时命令名就是对象的标签名。2、public int getModifiers(:如果引发动作时,用户也按了功能键,那么此方法返回功能键。即:ALT_MASK、CTRL_MASK、SHIFT_MASK、META_MASK.文本框、文本域与文本事件Java 中用于文本处理的基本组件有:TextFiled 和TextArea ,它们都是TextComponent 类的子类。一、文本事件(TextEvent ): TextEvent 类只包含一个事件,即代表文本区

19、域中文本变化的事件TEXT_VALUE_CHANGED,在文本域中改变文本时都将引发这个事件。二、文本域的创建:public TextField(:public TextField(int cols:public TextField(String str:public TextField(String str,int cols:三、文本区的创建:public TextArea(:public TextArea(int rows,int cols:public TextArea(String str:public TextArea(String str,int rows,int cols:四、公

20、共文本部件的特性:public void setText(String newText:public String getText(:public String getSelectedText(:public int getSelectionStart(:public int getSelectionEnd(:public void Select(int selectionStsrt,int selectionEnd:public void selectAll(:public void setEditable(:public boolean isEditable(:五、文本域的特性:publi

21、c void setEchoChar(char ch:public char getEchoChar(:public boolean echoCharIsSet(:public int getColumns(:六、文本区的特性:public void appendText(String textToAdd:public void insertText(String newText,int position:public void replaceText(String str,int start,int end:public int getColumns(:public int getRows(

22、:七、事件响应:1、TextComponent 的事件:TextEvent.2、TextField 的事件:TextEvent 、ActionEvent ;3、TextArea 的事件:TextEvent.4、对TextEvent 的处理过程为:textField1.addTextListener(this;而听众类需实现的方法为:public void textValueChanged(TextEvent e;也可以通过e.getSoure(获得引发事件的文本对象的引用。单、复选按钮,列表与选择事件一、选择事件(ItemEvent ): ItemEvent 类只包含一个事件,即代表选择项的选

23、中状态发生变化的事件:ITEM_STATE_CHANGED。引发这个事件的动作有:1、改变列表框类List 对象选项的选中或不选中;2、改变下拉列表框类Choice 对象选项的选中或不选中;3、改变复选按钮类Checkbox 对象选项的选中或不选中;4、改变菜单项CheckboxMenuItem 对象选项的选中或不选中;ItemEvent 类的主要方法有:1、public ItemSelectable getItemSelectable(:2、public Object getItem(:3、public int getStateChange(:ItemEvent.SELECTED、ItemE

24、vent.DESELECTED.二、复选按钮(Checkbox ):1、创建复选按钮:public Checkbox(:public Checkbox(String label:public Checkbox(String label,boolean state:public Checkbox(String label,boolean initialState,CheckboxGroup group:2、检查和设置复选按钮的状态:用public boolean getState(方法。如:if(myCheckbox.getState(else则public void setState(bool

25、ean state用来设置状态。3、监听复选按钮的变化:实现ItemListener 接口。具体方法为:addItemListener(ItemListener:removeItemListener(ItemListener:ItemListener 接口中有一个方法:public void itemStateChanged(ItemEvent evt.三、单选按钮(CheckboxGroup ):单选按钮是复选框的特例,用户可以把一组复选框放置在同一个复选框组中就可以创建单选按钮组。创建复选框组的方法为:public CheckboxGroup(:然后用户使用下列方法向复选组中加入单选按钮:

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

27、0”;2、常用方法:public 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、事件响应:下拉列也产生ItemE

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

29、lic 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(String item,int index:public

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

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

32、、public int getAdjustmentType:返回状态变化的类型,其值在:AdjustmentEvent.BLOCK_DECREMENT、 AdjustmentEvent.BLOCK_INCREMENT、 AdjustmentEvent.TRACK 、 AdjustmentEvent.UNIT_DECREMENT、 AdjustmentEvent.UNIT_INCREMENT.3、public int getValue(:返回滑块对应的当前数值。二、滚动条(Scrollbar ):1、创建滚动条:public Scrollbar(:public Scrollbar(int ori

33、entation: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 setBlockIncrement(int increment:public int getBlock

34、Increment(:public int getMininum(:、public int getMaxinum(:public void setValue(int increment:、public int getValue(:3、使用滚动条:Scrollbar 类产生AdjustmentEvent 事件,并将事件发送给实现AdjustmentListener 接口的对象。接口AdjustmentListener 内唯一方法为:public void adjustmentValueChanged(AdjustmentEvent evt. 在该方法内,通过对象evt 的方法调用来实现事件响应。

35、如:evt.getAdjustable(:evt.getValue(:evt.getAdjustmentType(的返回值与下列常量比较:AdjustmentEvent.BLOCK_DECREMENT:AdjustmentEvent.BLOCK_INCREMENT:AdjustmentEvent.TRACK :AdjustmentEvent.UNIT_DECREMENT:AdjustmentEvent.UNIT_INCREMENT:即可知发生的事件。画布与鼠标、键盘事件一、鼠标事件(MouseEvent ):在Java 2中有两个不同的接口用于处理鼠标事件,即MouseListener 和Mo

36、useMotionListener 。在MouseListener 中定义了与鼠标移动无关的方法,即:public abstract void mousePressed(MouseEvent e:public abstract void mouseReleased(MouseEvent e:public abstract void mouseClicked(MouseEvent e:public abstract void mouseEntered(MouseEvent epublic abstract void mouseExited(MouseEvent e:在MouseMotionLis

37、tener 中定义了与鼠标移动有关的方法,即:public abstract void mouseMoved(MouseEvent e:public abstract void mouseDragged(MouseEvent e:MouseEvent 类中封闭了若干个与鼠标有关的事件和常量。常量有:MOUSE_CLICKED:MOUSE_DRAGGED:MOUSE_ENTERED:MOUSE_EXITED:MOUSE_MOVED:MOUSE_PRESSED:MOUSE_RELEASED:方法有:public int getID(:返回上面的常量之一;public int getX(:publi

38、c int getY(:public Point getPoint(:public int getClickCount(:另外,也可以利用InputEvent 类的方法getModifiers(的返回值与以下常量比较: ALT_MASK:CTRL_MASK:SHIFT_MASK:META_MASK:BUTTON1_MASK:BUTTON2_MASK:BUTTON3_MASK:从而得知按下的功能键或单击鼠标的那个键。二、键盘事件(KeyEvent ):在Java 2中用于处理鼠标事件的接口为:KeyListener 。在KeyListener 中定义了与键盘有关的三个方法,即:public ab

39、stract void keyPressed(KeyEvent e:public abstract void keyReleased(KeyEvent e:public abstract void keyTyped(KeyEvent e:其中: keyTyped(KeyEvent e方法是前现两个方法的组合。KeyEvent 类的主要方法有:public char getKeyChar(:public String getKeyText(:KeyEvent 类的主要常量有:KEY_PRESSED:KEY_RELEASED:KEY_TYPED :键盘被击。三、画布(Canvas ):画布类是一个

40、没有特殊功能的部件。它主要用于创建自定义图形部件,在画布里可以像在Applet 一样绘制各种图形,也可以响应事件。它的创建如:Canvas myCanvas=new Canvas(;接着应用方法:size(来调整它的大小。它常用的方法为:public void paint(Graphics g.它响应的事件的鼠标和键盘事件。布局设计在java 的GUI 界面中,每一个容器都有一个与之相连的布局管理器。我们可以用方法:setLayout(为之设置相应的布局管理器。布局管理的作用是为容器内的组件的排列提供咨询。setLayout(的完整表达为:void setLayout(LayoutManage

41、r LayoutObj当容器增加组件、大小改变时都要根据LayoutObj 来调整组件的设置。一、FlowLayout(流线型布局管理器 :它的缺省的布局管理器,构造方法为:FlowLayout(:FlowLayout(int how:FlowLayout(int how,int horz,int vert:参数how 为对齐方式,horz 和vert 规定了组件之间的行间距和列间距。二、BorderLayout(方位型布局管理器 :它的构造方法为:BorderLayout(:BorderLayout(int how,int horz,int vert:参数how 为对齐方式,horz 和ve

42、rt 规定了组件之间的行间距和列间距。当使用BorderLayout 布局管理器时,要使用以下方法向容器中添加组件:Component add(String name,Component compObj:其中name 为方位名,compObj 为组件名。三、GridLayout(网格型布局管理器 :它的构造方法为:GridLayout(:GridLayout(int numRows,int numCols:四、CardLayout(卡片型布局管理器 :它的构造方法为:CardLayout(:CardLayout(int horz,int vert:另外在CardLayout 类提供了在组件间转

43、换了方法:void first(Container deck:void last(Container deck:void next(Container deck:void previous(Container deck:void show(Container deck,String cardName:这里deck 为容器名,cardName 为卡片名。五、GridBagLayout(网格袋型布局管理器 :GridBagLayout 与GridLayout 一样,也是把容器分成网格单元。但GridBagLayout 允许一个部件在必要时占用多个网格单元。所以用户在使用GridBagLayout

44、给容器加部件之前,必须给GridBagLayout 一个在何处放置部件的“建议”集。这个建议集是以类GridBagConstraints 的形式给出的。GridBagConstraints 类的属性为:gridx 、gridy :下一个部件将要放置的坐标;gridwidth 、gridheight :代表部件占用的单元的宽度和高度;fill:告诉GridBagLayout 当部件小于显示区域时该干什么。取值为:GridBagConstraint.NONE:GridBagConstraint.HORIZONTAL:GridBagConstraint.VERTICAL:GridBagConstra

45、int.BOTH:ipadx 、ipady:告诉GridBagLayout 在部件的x 方向和y 方向增加多少像素。insets:指示在部件周围留多少空隙。anchor:当部件小于显示区域时,部件在区域中显示的位置。weightx 、weighty:用于设置部件的相对尺寸。当使用GridBagLayout 在容器中增加部件时,应先创建部件,然后再创建GridBagConstraints 实例,如:GridBagLayout myGridBagLayout=new GridBagLayout(;setLayout(myGridBagLayout;Button myButton=new Butto

46、n(“My Button”;GridBagConstraints constraints=new GridBagConstraints(;constraints.weightx=10;constraints.gridwidth=1.0;constraints.fill=GridBagConstraints.BOTH;myGridLayout.setConstraints(myButton,constraints;add(myButton;(CircleApplet.javaPanel 与容器事件一、Container 类:它是一个抽象类,包含了所有容器组件都必须具有的方法和功能。public

47、synchronized Component add(Component newComponent;public synchronized Component add(Component Component,int pos;public synchronized Component add(String name Component comp;public synchronized void remove(Component Component;public synchronized void removeAll(Component Component;public synchronized

48、Component getComponent(int n throw ArrayIndexOutOfBoundsExce ption;public synchronized Component getComponents(;public int countComponents(;二、Container 类事件:当容器中加入或移出一个组件时,都会引发COMPONENT_ADDED和COMPONENT_REMOVED两种容器事件。处理的方法是实现ContainerListener 接口,并在听众内部实现抽象方法:public void componentAdded(ContainerEvent e

49、;public void componentRemoved(ContainerEvent e;ContainerEvent 事件类包含的事件有:COMPONENT_ADDED:COMPONENT_REMOVED:方法有:public Container getContainer(;public Component getChild(:三、Panel 类:面板类只用于组织部件,所以实际可以做的事情很少。创建的方法为:Panel myPanel=new Panel(;然后用户可以用add(myPanel将该面板加入到别的容器中。面板可以嵌套。Frame 与窗口事件一、Frame:public Fr

50、ame(:public Frame(String frameTitle:public void resize(int width,int height:public void show(:public void hide(:public void dispose(:public void setTitle(String newTitle:public String getTitle(:public void setCursor(int cursorType:public int getCursorType(:public void setResizable(boolean allowResizing:public boolean isResizable(:public void setIcon

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论