AWT组件及事件处理.ppt_第1页
AWT组件及事件处理.ppt_第2页
AWT组件及事件处理.ppt_第3页
AWT组件及事件处理.ppt_第4页
AWT组件及事件处理.ppt_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

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

文档简介

第七讲 AWT组件及事件处理,7.1 Java窗口 7.2 文本框 7.3 内部类实例做监视器 7.4 按钮与标签 7.5 菜单项 7.6 文本区 7.7 面板 7.8 布局,7.9 画布 7.10 选择型组件 7.11 Component类的常用方法 7.12 窗口事件 7.13 鼠标事件 7.14 焦点事件 7.15 键盘事件,教学目的: 1.掌握图形用户界面中各种基本组件的属性及使用方法; 2.掌握图形用户界面的事件处理机制。 教学内容: 本讲主要介绍Java GUI中各种组件的用法,及相应的事件处理机制。,重点: 1各组件的属性及使用。 2. 事件的处理方法。 难点: GUI中的事件处理机制。,补充知识,一、Java图形用户界面 图形用户界面(GUI,Graphical User Interface)是为应用程序提供一个图形化的界面,程序通过GUI与用户交互,GUI能使一个应用程序具有与众不同的“外观”与“感觉”。 二、容器 容器(Container)是组件(Component)的抽象子类,在该类中允许装入其他的组件,要装入的组件也可以是容器,在这些窗口中还可以装入其他的组件,这样可以创建完整的层次结构。容器有助于在屏幕上布置GUI组件。最常用的容器是Panel和Frame。,补充知识,三、 java.awt中的各个类,四、图形组件类的继承关系(补充知识),补充知识,五、窗口类 AWT提供了三个在屏幕上显示窗口的组件:Window、Frame和Dialog。这三个组件都用于显示窗口,而且相互之间的区别也不明显,因此有时候很难确定到底使用哪个组件更好。,补充知识,1、窗口(Window) java.awt.Window是三个窗口组件中最基本的组件,它实际上是Frame与Dialog组件的超类。窗口组件没有边界、标题栏与菜单栏,而且大小不可以调整。 常用窗口实现的界面包括:产品信息的封面(如Outlook等软件启动时,显示在屏幕中间且几秒后自动消失的封面窗口),提示帮助信息(如使用金山词霸等软件时,移动鼠标到某个英文单词上时自动弹出的解释信息)等。,补充知识,2、框架(Frame) java.awt.Frame是Window的一个子类,它是带有标题栏和边界的窗口,而且允许调整大小。另外,用户还可以为框架附加一个菜单栏。用户在程序设计过程中,当程序窗口需要图表化或者需要包含菜单栏时,则可以选择使用框架组件。 构造一个框架后,可以用add()方法来给框架添加组件。框架的缺省布局管理器属性是BorderLayout。可以用setLayout()方式来改变布局管理器属性。,补充知识,3、对话框(Dialog) java.awt.Dialog也是Window的扩展类。与框架相同的是,对话框也拥有边界与标题栏,而且也可以调整大小;而与框架不同的是,对话框不支持附加菜单栏,而且对话框可以模式化属性设置,这是窗口和框架都不允许的。因此,如果用户在程序设计过程中需要创建一个临时窗口与用户交换信息时,使用模式对话框是最方便的。,补充知识,另外,AWT中还提供了Dialog类的一个常用的扩展类FileDialog(文件对话框)。它可以为用户选择一个待打开或保存的文件。 文件对话框是文件选择设备的一个实现。它有自己的自由窗口以及窗口元素,并且允许用户浏览文件系统,以及为以后的操作选择一个特定的文件。(详见例程),7.1 Java窗口,Frame类是Container类的间接子类。当需要一个窗口时,可使用Frame或其子类创建一个对象。窗口也是一个容器,可以向窗口添加组件。需要注意的是,窗口默认地被系统添加到显示器屏幕上。因此,不允许将一个窗口添加到另一个容器中。,7.1 Java窗口,一、 Frame常用方法 1Frame() 该构造方法可以创建一个无标题的窗口,窗口的默认布局为BorderLayout布局。 2Frame(String s) 该构造方法可以创建一个标题为s的窗口,窗口的默认布局为BorderLayout布局。 3public void setBounds(int a,int b,int width,int height) 窗口调用该方法可以设置出现在屏幕上时的初始位置是(a,b),即距屏幕左面a个像素、距屏幕上方b个像素;窗口的宽是width,高是height。,7.1 Java窗口,4public void setSize(int width,int height) 设置窗口的大小,窗口在屏幕出现是默认位置是(0,0)。 5public void setVisible(boolean b) 设置窗口是可见还是不可见,窗口默认是不可见的。 6public void setResizable(boolean b) 设置窗口是否可调整大小,窗口默认是可调整大小的。,7.1 Java窗口,二、菜单条、菜单、菜单项 java.awt包中的Menubar类是负责创建菜单条的,即Menubar的一个实例就是一个菜单条。Frame类有一个将菜单条放置到窗口中的方法:setMenuBar(MenuBar bar); java.awt包中的Menu类是负责创建菜单的,即Menu的一个实例就是一个菜单 java.awt包的MunuItem类负责创建菜单项,即MenuItem的一个实例就是一个菜单项。,例7.1,import java.awt.*; class FirstWindow extends Frame MenuBar menubar=new MenuBar(); Menu menu; MenuItem item1, item2; setBounds(0,0,dim.width,dim.heigth/2); setTitle(s); item2=new MenuItem(“打开”); setMenuBar(menubar); public class Example7_1,7.2文本框,Java.awt包中的TextField类是专门用来建立文本框的,用户可以在文本框中输入单行文本。,7.2文本框,.TextField类的主要方法 1)TextField(int x) 如果使用这个构造方法创建文本框对象,文本框中的可见字符序列的长度为 x个机器字符长。文本框是可编辑的,用户可以在文本框中输入若干个字符。 2)TextField(String s ) 如果使用这个构造方法创建文本框对象,则文本框的初始字符串为s。文本框是可编辑的,可以在文本框中输入若干个字符。 3)public void setText(String s) 文本框对象调用该方法可以设置文本框中的文本为参数s指定的文本,文本框中先前的文本将被清除。,7.2文本框,4)public String getText() 文本框对象调用该方法可以获取文本框中的文本。 5)public void addActionListener (ActionListener l)文本框对象调用该方法可以向文本框增加动作监视器(将监视器注册到文本框)。,7.2文本框,2.文本框上的ActionEvent事件 学习组件除了了解组件的属性和功能外,一个更重要的方面是学习怎样处理组件上发生的界面事件。 在学习处理事件时,必须很好地掌握事件源、监视器、处理事件的接口这三个概念。 通过处理文本框这个具体的组件上的事件,来掌握处理事件的基本原理。,例7.2,class WindowText extends Frame TextFiled text1=new TextFiled(“输入密码:”,10); text1.setEditable(false); super(s); setLayout(new FlowLayout(); text2.setEchochar(*); ,7.2文本框,3、Java的事件处理模式 1)事件源:能够产生事件的对象都可以成为事件源,如文本框、按钮、下拉式列表等。也就是说,事件源必须是一个对象,而且这个对象必须是Java认为能够发生事件的对象。 2)监视器:需要一个对象对事件源进行监视,以便对发生的事件作出处理。事件源通过调用相应的方法将某个对象作为自己的监视器。例如,对于文本框,这个方法是: addActionListener(监视器); 创建该监视器对象的类必须声明实现相应的接口 ,一个监听器对象是一个实现了专门的监听器接口的类的实例。,7.2文本框,3)处理事件的接口:在文本框获得输入焦点之后,如果用户按回键,Java运行系统就自动用ActionEvent类创建了一个对象,即发生了ActionEvent事件 当事件源发生事件时,监视器就自动调用执行被类实现的某个接口方法。 4)Event handlers(事件处理器):接收事件对象、解释事件对象并处理用户交互的方法。,处理事件示意图,7.2文本框,4、引入事件处理机制后的编程基本方法如下: 对java.awt中组件实现事件处理必须使用java.awt.event包,所以在程序开始应加入import java.awt.event.*语句。 用如下语句设置事件监听者: 事件源.addXXListener(XXListener代表某种事件监听者)。,7.2文本框, 事件监听者所对应的类实现事件所对应的接口XXListener,并重写接口中的全部方法。这样就可以处理图形用户界面中的对应事件了。要删除事件监听者可以使用语句: 事件源.removeXXListener; (详见课本例子例7.3),例7.3,import java.awt.*; import java.awt.event.*; class MyWindow extends Frame implements ActionListener text1.addActionListener(this); text2.addActionListener(this); public void actionPerformed(ActionEvent e) if(e.getSource()=text1) String word=text1.getText(); else if(e.getSource()=text2) ,补充: Java常用事件 _列表,7.3内部类实例做监视器,内部类实例做监视器的本质就是:用内部类实现了相应的接口,使用其定义的对象做监视器。(详见课本例7.5),例7.5,text1.addActionListener(police); /内部类的实例做监视器 text1.addActionListener(new ActionListener() /和接口有关的匿名类的实例做监视器 public void actionPerformed(ActionEvent e) String number=e.getActionCommand(); int n=Integer.parseInt(number); int m=n*n; text2.setText(n+“的平方是:“+m); );,7.4按钮与标签,1、标签组件 标签的功能是只显示文本,不能动态地编辑 文本。Lalel类的实例就是一个标签。 标签使用Label类来创建,而Label类是从 Component类直接扩展而来的。Label类的构造 函数及常用方法 如图所示。,7.4按钮与标签,7.4按钮与标签,2、按钮组件 Java.awt包中的Button类是专门用来建立按钮的。而Button类是由Component类直接扩展的,即Button类创建的一个对象就是一个按钮。要想使Button可见,必须使用add方法将它们添加到一个容器中。 Button类的构造函数及常用方法如图所示。,7.4按钮与标签,7.4按钮与标签,3、按钮的ActionEvent事件 按钮可以发生ActionEvent事件,当按钮获得监视器之后,用鼠标单击按钮,就发生ActionEven事件。,例7.6,Label 提示条; TextField 输入框; Button buttonGetNumber,buttonEnter; 提示条=new Label(“输入你的猜测: “, Label.CENTER); 提示条.setBackground(Color.cyan); buttonGetNumber=new Button(“得到一个随机数“); buttonEnter.addActionListener(this); buttonGetNumber.addActionListener(this);,7.5菜单项,菜单及其相关的类在java.awt软件包中的 层次关系如下:,7.5菜单项,MenuBar类用于创建菜单栏,菜单栏是菜单的容器。 Menu类用于创建菜单,菜单中包含若干菜单项,并将其添加到菜单栏上。当使用鼠标点击一个菜单时,就将展开该菜单,并显示一列菜单项。 MenuItem类用于创建菜单项。一个菜单项就是包含在菜单中的一个字符串,当选中它时将会执行一个动作。,7.5菜单项,CheckboxMenuItem类用于创建复选框菜单。复选框菜单项就是带有选择标记的菜单项。当选中复选框菜单项时,在该菜单项左边出现一个选择标记。如果再次选中该项,则该选项左边的选择标记就会消失。 (见补充例程MenuDemo , pop MenuDemo ),7.5菜单项,当单击某个菜单项时可以发生ActionEvent事件,因此,我们可以通过处理ActionEvent事件实现我们想要进行的操作。 另外,可以使用MenuShotcut类为菜单项设置快捷键,该类的一个构造方法是: MenuShotcut (int key); 其中key可以取值:KeyEvent.VK_A KeyEvent.VK_Z; 菜单项使用setShortcut(MenuShortcut k)方法来设置快捷键。,例7.8,menubar=new MenuBar(); menu=new Menu(“文件“); itemExit=new MenuItem(“退出“); itemExit.setShortcut(new MenuShortcut(KeyEvent.VK_E); menu.add(itemExit); menubar.add(menu); itemExit.addActionListener(this);,7.6文本区,java.awt包中的类TextArea类是专门用来建立文本区的,即TextArea创建的一个对象称做一个文本区。用户可以在文本区输入多行的文本。,7.6文本区,1. TextArea类主要方法 1)TextArea(int x,int y) 使用这个构造方法创建文本区对象,文本框可见行数和列数数分别为x和y。文本区有水平和垂直滚动条。 2)public void setText(String s) 文本区对象调用该方法可以将文本区中的文本设置为参数s指定的文本,文本区中先前的文本将被清除。,7.6文本区,3)public String getText() 文本区对象调用该方法可以获取文本区中的文本。 4)public void append(String s) 文本区对象调用该方法可以在文本区中尾加文本。 5)addTextListener(TextListener) 文本区对象调用该方法可以向文本框增加文本监视器。,7.6文本区,.文本区上的TextEvent事件 1)对于文本区事件源,可以发生TextEvent事件。当文本区获得监视器之后,在文本区域中改变文本的内容,如键入字符、删除字符时,TextEvent类将自动创建一个事件对象。 2)发生TextEvent事件的事件源获得监视器的方法是addTextListener(监视器),由于文本区可以发生TextEvent事件,所以TextArea类提供了addTextListener方法。,7.6文本区,3)处理发生TextEvent 事件的接口是TextListener,该接口中只有一个的方法: textValueChanged (TextEvent e); 4)创建文本区监视器的类必须要实现TextListener接口。当文本区发生TextEvent事件时,监视器将自动调用方法: textValueChanged (TextEvent e) 对发生的事件作出处理。,例7.9,class WindowTextArea extends Frame implements TextListener,ActionListener TextArea text1,text2; text1=new TextArea(6,15); text2=new TextArea(6,15); text2.setEditable(false); text1.addTextListener(this); buttonClear.addActionListener(this); public void textValueChanged(TextEvent e) public void actionPerformed(ActionEvent e) ,public void textValueChanged(TextEvent e) String s=text1.getText(); StringTokenizer fenxi=new StringTokenizer(s,“ ,n“); int n=fenxi.countTokens(); String a=new Stringn; for(int i=0;i=n-1;i+) String temp=fenxi.nextToken(); ai=temp; Arrays.sort(a); text2.setText(null); for(int i=0;in;i+) text2.append(ai+“n“); ,7.7面板,1、Panel类 java.awt包的Panel类是Container(容器)的子类,因此Panel类及其子类的实例也是一个容器,Panel型容器的默认布局是FlowLayout型布局。Panel类创建的对象称做面板,我们经常在一个面板里添加若干个组件后,再把面板放到另一个容器里。,例7.10,class Mypanel extends Panel implements ActionListener setBackground(Color.pink); backColor=getBackground(); button1.addActionListener(this); button2.addActionListener(this); class WindowPanel extends Frame implements ActionListener panel1=new Mypanel(); panel2=new Mypanel(); button.addActionListener(this);,7.7面板,2、ScrollPane类 java.awt包中的ScrollPane类也是Container类的子类,因此该类创建的对象也是一个容器,称为滚动面板。我们可以把一个组件放到一个滚动面板中,然后通过滚动条来观察这个组件。与Panel创建的容器所不同的是,ScrollPane带有滚动条,而且只能向滚动面板添加一个组件。,7.7面板,滚动面板(ScrollPane)实现了为单一组件提供水平方向或者/和竖直方向的滚动条。滚动条的显示方式可以设置成三种模式:需要的时候才显示(SCROLLBARS_AS_NEEDED(默认),只有当滚动面板需要的时候才创建并显示滚动条)、总是显示(SCROLLBARS_ALWAYS,滚动面板总是创建并显示滚动条)和决不显示(SCROLLBARS_NEVER,滚动面板决不创建和显示滚动条)。 ScrollPane类的构造函数如下:,7.7面板,例7.11,Panel p; ScrollPane scrollpane; p=new Panel(); scrollpane=new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS); scrollpane.add(p); add(scrollpane);,7.8布局,布局管理器会依据组件的加入顺序决定其摆放方式。组件的大小、形状、位置,在不同的布局管理器下有显著的不同。此外,布局管理器会自动适应小程序或应用程序窗口的大小,所以如果某个窗口的大小改变了,那么其上各个组件的大小、形状、位置都有可能发生改变。,7.8布局,Java提供以下几种布局管理器:流布局(Fl-owLayout)、边界布局(BorderLayout)、网格布局(GridLayout)、网格包布局(GridBagLayout)、卡片布局(CardLayout)和手工布局。 Panel、Applet的默认布局为流布局, Window、Frame的默认布局为边界布局。容器可以使用方法:setLayout(布局对象);来设置自己的布局。,7.8布局,1、FlowLayout布局 FlowLayout类创建的对象称做FlowLayout型布局。FlowLayout型布局是Panel型容器的默认布局,即Panel及其子类创建的容器对象,如果不专门为其指定布局,则它们的布局就是FlowLayout型布局。 如果一个容器使用这个FlowLayout型布局,组件按照加入的先后顺序从左向右排列,一行排满之后就转到下一行继续从左至右排列。,7.8布局,7.8布局,例7.12,FlowLayout flow=new FlowLayout(); flow.setAlignment(FlowLayout.LEFT); flow.setHgap(2); flow.setVgap(8); setLayout(flow);,7.8布局,2、BorderLayout布局 BorderLayout 布局是Window型容器的默认布局,例如Frame、Dialog都是Window类的子类,它们的默认布局都是BorderLayout 布局。 如果一个容器使用这种布局,那么容器空间简单地划分为东、西、南、北、中五个区域,中间的区域最大。,7.8布局,注意:在边界布局下add方法的使用方法: add(Component c, int position);,7.8布局,其中参数position可取以下常量之一:BorderLayout.NORTH,BorderLayout.SOUTH,BorderLayout.EAST,BorderLayout.WEST,BorderLayout.CENTER。 例如:下面语句将按钮eastButton放置在东区: add(eastButton, BorderLayout.EAST); 由于组件放置的位置必须由参数指定,因此可按任何顺序向容器添加组件。,例7.12,Frame win=new Frame(“窗体“); win.add(bNorth,BorderLayout.NORTH); win.add(bSouth,BorderLayout.SOUTH); win.add(bEast,BorderLayout.EAST); win.add(bWest,BorderLayout.WEST); win.add(bCenter,BorderLayout.CENTER);,7.8布局,3、CardLayout 布局 使用CardLayout 的容器可以容纳多个组件,但是实际上同一时刻容器只能从这些组件中选出一个来显示,就像一叠“扑克牌”每次只能显示最上面一张一样,这个被显示的组件将占据所有的容器空间,依次排序。,例7.14,CardLayout mycard; mycard=new CardLayout(); pCenter=new Panel(); pCenter.setLayout(mycard); mycard.first(pCenter); mycard.next(pCenter); mycard.last(pCenter);,7.8布局,4、GridLayout布局 网格布局将容器划分成网格,这样各个组件就可以按行列放置到每个网格中,每个组件的大小一样(均分)。在向GridLayout添加组件时,其顺序是从网格的左上角开始,从左向右排列,直到排满一行,再从下一行开始从左向右依次排列。GridLayout类的构造函数如下:,7.8布局,7.8布局,GridLayout的布局策略是把容器划分成若干行乘若干列的网格区域,组件就位于这些划分出来的小格中。GridLayout比较灵活,划分多少网格由程序自由控制,而且组件定位也比较精确 由于GridLayout布局中每个网格都是相同大小并且强制组件与网格的大小相同,使得容器中的每个组件也都是相同的大小,显得很不自然。为了克服这个缺点,你可以使用容器嵌套。,例7.15,GridLayout grid; grid=new GridLayout(12,12); setLayout(grid); Label label=new Label1212; labelij.setBackground(Color.black);,7.8布局,5、BoxLayout布局 盒式布局的容器将组件排列在一行或一列,这取决于创建盒式布局对象时,是否指定了是行排列还是列排列。 使用行(列)型盒式布局的容器将组件排列在一行(列),组件按加入的先后顺序从左(上)向右(下)排列,容器的两端是剩余的空间。和FlowLayou布局不同的是,使用行型盒式布局的容器只有一行(列),即使组件再多,也不会延伸到下一行(列),这些组件可能会被缩小大小,紧缩在这一行(列)中。,例7.16,import javax.swing.border.*; Box baseBox ,boxV1,boxV2; boxV1=Box.createVerticalBox(); boxV1.add(new Label(“姓名“); boxV1.add(Box.createVerticalStrut(8); baseBox=Box.createHorizontalBox(); baseBox.add(boxV1); baseBox.add(Box.createHorizontalStrut(10); baseBox.add(boxV2);,7.9画布,java.awt包中的类Canvas负责创建画布对象。创建画布对象的常用办法是用Canvas的子类来创建画布对象,并在子类中重写父类的public void paint(Graphics g)方法。该方法是Component类的一个方法,可以在其子类中重写这个方法,当重写这个方法时,参数g是自动实例化的,这样我们就可以在子类中使用 g调用相应方法,比如画串、画图形、图像等。,例7.18,class Mycanvas extends Canvas public void paint(Graphics g) g.drawOval(x,y,2*r,2*r); Mycanvas canvas; canvas=new Mycanvas(); canvas.repaint();,7.10选择型组件,1、选择框 选择框提供两种状态,一种是选中,另一种是未选中。java.awt包中的Checkbox用来建立选择框,即Checkbox创建的一个对象就是一个选择框。 1) Checkbox类的常用方法,7.10选择型组件,7.10选择型组件,2)选择框上的ItemEvent事件 选择框可以发生ItemEvent事件,发生ItemEvent事件的事件源获得监视器的方法是:addItemListener(监视器)。 创建监视器的类必须实现ItemListener接口,该接口中只有一个的方法。当在选择框发生ItemEvent事件时,监视器将自动调用接口方法: ItemStateChanged(ItemEvent e) 对发生的事件作出处理。,例7.19,class Mypanel1 extends Panel implements ItemListener Checkbox box1,box2,box3; CheckboxGroup sex; sex=new CheckboxGroup(); box1=new Checkbox(“男“,true,sex); box2=new Checkbox(“女“,false,sex); box1.addItemListener(this); box2.addItemListener(this);,public void itemStateChanged(ItemEvent e) Checkbox box=(Checkbox)e.getSource(); if(box.getState() int n=text.getCaretPosition(); text.insert(box.getLabel(),n); ,7.10选择型组件,2、下拉列表 下拉列表框由Choice类创建,它只能从列表中选择一个选项,当用户单击旁边下拉箭头按钮时,选项列表打开。 下拉式列表可以发生ItemEvent事件。当下拉式列表获得监视器之后,用户在下拉列表选项列表中选中某个选项时就发生ItemEvent事件。,例7.20,Choice choice; choice=new Choice(); choice.add(“音乐天地“); choice.add(“武术天地“); choice.addItemListener(this); add.addActionListener(this); text.addActionListener(this); del.addActionListener(this);,public void itemStateChanged(ItemEvent e) String name=choice.getSelectedItem(); int index=choice.getSelectedIndex(); area.setText(“n“+index+“:“+name); String name=text.getText(); choice.add(name); choice.select(name); area.append(“n列表添加:“+name);,7.10选择型组件,3、滚动列表 滚动列表框由List类创建,用于显示一系列的选项,用户可以从中选择一个或多个选项。 滚动列表和下拉列表的另一不同之处是,滚动列表除了可以发生ItemEvent事件外,还可以发生ActionEvent事件。当用鼠标单击滚动列表的某个选项后,发生ItemEvent事件;当用鼠标双击某个选项后,发生ActionEvent事件。,7.11 Component类的常用方法,Component类是所有组件的父类,这一节介绍 Component类的常用方法 。 1、组件的颜色 public void setBackground(Color c) 设置组件的背景色。 public void setForeground(Color c) 设置组件的前景色。 public Color getBackground() 获取组件的背景色。 public Color getForeground() 获取组件的前景色。,7.11 Component类的常用方法,2、组件的字体 public void setFont(Font f) 组件调用该方法设置组件上的字体。例如,文本组件调用该方法可以设置文本组件中的字体。 public Font getFont() 组件调用该方法获取组件上的字体。,7.11 Component类的常用方法,3、组件的大小与位置 public void setSize(int width,int height) 组件调用该方法设置组件的大小,参数width指定组件的宽度,height指定组件的高度。 public void setLocation(int x,int y) 组件调用该方法设置组件在容器中的位置,包含该组件的容器都有默认的坐标系,容器的坐标系的左上角的坐标是(0,0),参数x,y指定该组件的左上角在容器的坐标系中的坐标,即组件距容器的左边界 x个像素,距容器的上边界 y 个像素。 public Dimension getSize() 组件调用该方法返回一个Dimension对象的引用,该对像实体中含有名字是width 和height的成员变量,方法返回的Dimension 对象的width的值就是组件的宽度、height的值就是当前组件的高度。,7.11 Component类的常用方法,public Point getLocation() 组件调用该方法返回一个Point对象的引用,该对像实体中含有名字是x 和y的成员变量,方法返回的Point对象的x,y的值就是组件的左上角在容器的坐标系中的x坐标和y坐标。 public void setBounds(int x,int y,int width,int height) 组件调用该方法设置组件在容器中的位置和组件的大小。该方法相当于setSize方法和setLocation方法的组合。 public Rectangle getBounds() 组件调用该方法返回一个Rectangle对象的引用,该对象实体中含有名字是x、y、width 和height的成员变量,方法返回的Rectangle对象的x,y的值就是组件的左上角在容器的坐标系中的x坐标和y坐标,width和height的值就是当前组件的宽度和高度。,7.11 Component类的常用方法,4、组件的激活与可见性 public void setEnabled(boolean b) 组件调用该方法可以设置组件是否可被激活,当参数b取值true时,组件可以被激活,当参数b取值false 时,组件不可激活。默认情况下,组件是可以被激活的。 public void setVisible(boolean) 设置组件在该容器中的可见性,当参数b取值true时,组件在容器中可见,当参数b取值false 时,组件在容器中不可见。除了Window型组件外,其它类型组件默认是可见的。,7.11 Component类的常用方法,5、组件上的光标 public void setCursor(Cursor c) 设置鼠标指向组件时的光标形状。 可以使用 Cursor类的类方法直接获得一个光标对象,例如: Cursor c=Cursor. getPredefinedCursor (Cursor.HAND_CURSOR);,7.11 Component类的常用方法,6、paint方法与repaint方法 调用repaint()方法时,repaint()方法会再去调用update(Graphics g)方法。update(Graphics g)方法也是Component类中的一个方法,这个方法的功能是:清除paint()方法以前所画的内容,然后再调用paint方法。因此我们可以在子类中重写update方法(即隐藏父类的方法),根据需要来清除哪些部分或保留哪些部分。,7.12窗口事件,Frame是Window的子类,凡是 Window子类创建的对象都可以发生WindowEvent类型事件,即窗口事件。 当一个Frame窗口被激活、撤消激活、打开、关闭、图标化或撤消图标化时,就引发了窗口事件,即WindowEvent创建一个窗口事件对象。WindowEvent创建的事件对象调用getWindow()方法可以获取发生窗口事件的窗口。窗口使用addWindowlistener方法获得监视器,创建监视器对象的类必须实现WindowListener接口,该接口中有7个不同的方法。,7.12窗口事件,1、WindowListener接口中的方法 public void windowActivated(WindowEvent e) 当窗口从非激活状态到激活时,窗口的监视器调用该方法。 public void windowDeactivated(WindowEvent e) 当窗口激活状态到非激活状态时,窗口的监视器调用该方法。 public void windowClosing(WindowEvent e) 当窗口正在被关闭时,窗口的监视器调用该方法。,7.12窗口事件,public void windowClosed(WindowEvent e) 当窗口关闭后,窗口的监视器调用该方法。 public void windowIconified(WindowEvent e) 当窗口图标化时,窗口的监视器调用该方法。 public void windowDeiconified(WindowEvent e) 当窗口撤消图标化时,窗口的监视器调用该方法。 public void windowOpened(WindowEvent e) 当窗口打开时,窗口的监视器调用该方法。,例7.25,class MyFrame extends Frame implements WindowListener addWindowListener(this);,7.12窗口事件,2、WindowAdapter适配器 为了方便,Java为那些声明了多个方法的Listener接口提供了一个对应的适配器(Adapter)类,在该类中实现了对应接口的所有方法,只是方法体为空。 在创建新类时,可以不实现接口,而是只继承某个适当的适配器,并且仅覆盖所关心的事件处理方法即可。 接口及对应的适配器类 如下所示:,7.12窗口事件,例7.26,class MyFrame extends Frame Boy police; addWindowListener(police); class Boy extends WindowAdapter,7.13鼠标事件,任何组件上都可以发生鼠标事件,如:鼠标进入组件、退出组件、在组件上方单击鼠标、拖动鼠标等都触发组件发生鼠标事件,也就是说,组件可以成为发生鼠标事件的事件源。 1、MouseListener接口,7.13鼠标事件,使用MouseListener接口可以处理5种操作触发的鼠标事件: (1)在事件源上按下鼠标键。 (2)在事件源上释放鼠标键。 (3)在事件源上击鼠标键。 (4)鼠标进入事件源。 (5)鼠标退出事件源。 鼠标事件的类型是MouseEvent,即当发生鼠标事件时,MouseEvent类自动创建一个事件对象。,7.13鼠标事件,2、MouseListener接口中的方法: (1)mousePressed(MouseEvent) 负责处理在组件上按下鼠标触发的鼠标事件,当在组件上按下鼠标时,监视器将自动调用接口中的这个方法对事件作出处理。 (2)mouseReleased(MouseEvent) 负责处理在组件上释放鼠标触发的鼠标事件,当在组件上释放鼠标时,监视器将自动调用接口中的这个方法对事件作出处理。,7.13鼠标事件,(3)mouseEntered(MouseEvent) 负责处理鼠进入组件触发的鼠标事件,当鼠标进入组件上方时,监视器将自动调用接口中的这个方法对事件作出处理。 (4)mouseExited(MouseEvent) 负责处理鼠标离开组件触发的鼠标事件,当鼠标离开组件时,监视器自动调用接口中的这个方法对事件作出处理。 (5)mouseClicked(MouseEvent) 负责处理在组件上单击或连击鼠标触发的鼠标事件,当单击或连击鼠标时,监视器自动调用接口中的这个方法对事件作出处理。,例7.29,class MyCanvas extends Canvas implements MouseListener MyCanvas() setBackground(Color.cyan) ; addMouseListener(this); if(e.getModifiers()=InputEvent.BUTTON1_MASK) if(e.getModifiers()=InputEvent.BUTTON3_MASK),public class Example7_29 public static void main(String args) Frame f=new Frame(); f.set

温馨提示

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

评论

0/150

提交评论