




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Unit 8: AWT与事件处理,AWT简介 Java的抽象窗口工具包AWT(Abstract Window Toolkit)提供了创建基于窗口的图形用户界面的便利工具。它的内容相当丰富,共有60多个类和接口 利用AWT类库,用户可以方便地建立自己的窗口界面,响应并处理交互事件 图形窗口形式的用户界面不同于传统的命令行形式的用户界面,它通过“窗口”、“按钮”、“菜单”等可视的灵活方式提供人机交互的手段。Java的AWT包定义了窗口系统所显示的各种对象,既包括组织窗口屏幕元素所需的基本类,也包括图形处理,显示所需的基本类,1,“组件”(Component)和“容器”(Container),Jav
2、a组织窗口元素是通过“组件”(Component)和“容器”(Container)来进行的 “组件”包括屏幕上的各种组成部件,如按钮、菜单、画布等 “容器”是一种特殊的组件,用来放置、容纳其它组件或容器,如面板、对话框等,2,Component类,代表组件的最基本的类是Component。它是一个抽象类,封装定义了窗口中各种对象一系列最基本的属性和操作 类Component的子类包括许多我们熟悉且常用的组件对象,如按钮类Button,标签类Label,选择框类Checkbox,画布类Canvas等 Component还有一个特殊的子类Container作为最基本的组件容器 Container的
3、两个子类是类Window和类Panel,3,GUI程序设计的主要内容,设计基本容器窗口 设置容器布局 添加所需组件 交互事件处理,4,基本容器Frame类,import java.awt.*; public class MyFrame extends Frame public MyFrame(String str) super(str); public static void main(String args) MyFrame fr=new MyFrame(“Hello Out There!”); fr.setSize(300,100); fr.setBackround(Color.Blue)
4、; fr.setVisible(true); ,5,基本容器Panel类,import java.awt.*; public class FrameWithPanel extends Frame public FrameWithPanel(String str) super(str); public static void main(String args) FrameWithPanel fr=new FrameWithPanel(“Frame with panel”); Panel pan=new Panel(); fr.setSize(200,200); fr.setBackround(C
5、olor.Blue); fr.setLayout(null); pan.setSize(100,100); pan.setBackground(Color.Yellow); fr.add(pan); fr.setVisible(true); ,6,容器布局策略,FlowLayout BorderLayout CardLayout GridLayout GridBagLayout,7,FlowLayout,顺序布局是Panel容器的缺省布局策略,即将加入容器中的组件依次从左至右,从上至下排列,适用于组件个数较少的情况。,f = new Frame(Flow Layout); f.setLayou
6、t(new FlowLayout(); button1 = new Button(OK); button2 = new Button(Open); button3 = new Button(Close); f.add(button1); f.add(button2); f.add(button3);,8,BorderLayout,是Frame的缺省布局。区域布局将容器分为东西南北中五个区域,加入组件时,应通过字符串East/West /South/North/Center来标记组件的方位,f = new Frame(“Border Layout); f.add(bn, BorderLayout
7、.NORTH); f.add(bs, BorderLayout.SOUTH); f.add(bw, “West”); f.add(be, BorderLayout.EAST); f.add(bc, BorderLayout.CENTER);,9,GridLayout,网格布局将容器划分为n*m的大小相同的小格,每格区间可摆放一个组件。向容器中增加组件时,按从左至右,从上至下的顺序依次存放,f = new Frame(“Grid Layout); f.setLayout(new GridLayout(3,2); f.add(b1); f.add(b2); f.add(b3); f.add(b4)
8、; f.add(b5); f.add(b6);,new GridLayout(3,2,5,0),10,GridLayout,例TestGridLayout,setLayout(new GridLayout(5, 6); for (int i = 0; i =0) if (int) (Math.random() * 100) = 50) add(new Button(Integer.toString(i * 6 + j); else add(new Label(); ,11,CardLayout,卡片布局将容器中的每一个组件当作一个卡片,一次仅有一个卡片可见,最初显示容器时,加入到容器的第一个组
9、件可见。,f = new Frame(Card Test); myCard = new CardLayout(); f.setLayout(myCard); p1 = new Panel(); p2 = new Panel(); f.add(p1, First); f.add(p2, Second);,12,CardLayout,显示组件的方法 show(容器,组件名字符串)显示指定卡片 如:myCard.show(f, Second); first(容器) last(容器) next(容器) previous(容器),13,GridBagLayout,将视图分为多个单元,可以指定每个组件占用
10、的单元 GridBagConstraints类-参数: gridx,gridy:组件的位置 gridwidth,gridheight:组件覆盖的网格单元个数 insets:组件和包含它的网格单元之间的距离 weightx,weighty:视图大小变化时,组件的情况,标准为100,0为组件占用空间不变 fill:填充方式,4种 anchor:组件在网格单元中的位置,CENTER/NORTH/NORTHWEST,14,使用Panel进行布局,可以满足更复杂的布局要求,p = new Panel(); bfile = new Button(File); bhelp = new Button(Help
11、); p.add(bfile); p.add(bhelp);,bw = new Button(West); bc = new Button(Work space region); f.add(bw, BorderLayout.WEST); f.add(bc, BorderLayout.CENTER); f.add(p, BorderLayout.NORTH); f.pack();,15,使用Panel进行布局,可以满足更复杂的布局要求,p1.add(prompt1); p2.add(prompt2); p3.add(prompt3); p3.add(btn); p1.add(p3); setL
12、ayout(new GridLayout(2,1); add(p1); add(p2);,16,AWT绘图,目的:了解并实现简单的AWT绘图 Gaphics类及常用绘图方法 Graphics类包含了图形方法,用于绘制图形。 drawLine drawRect/fillRect/clearRect/drawRoundRect etc. drawOval/fillOval drawArc/fillArc drawPolygon/fill,17,AWT绘图,Graphics2D类对象将直线、圆等作为一个对象来绘制图形。,18,Java的事件处理,Java语言将每一个键盘或鼠标的操作定义为一个“事件”
13、。在编程中只需定义每个特定事件发生时程序应该做出何种响应即可。这就是图形用户界面中的“事件”和“事件响应” 除了鼠标和键盘的操作,又如系统的状态改变、标准图形界面元素等都可以引发事件,系统对这些事件分别定义处理代码,就可以保证应用程序系统有条不紊地工作。,19,Java的事件处理,事件源(如按钮、文本框等对象),监听者(任意对象) implements XListener,Xevent事件对象,注册监听者 addXListener,用户操作,触发事件,调用事件处理方法,20,事件对象,21,事件对象,22,事件监听接口,23,常见事件处理(1),按钮点击、菜单选择、输入栏回车: - 产生Act
14、ionEvent事件对象,用addActionListener方法注册监听对象,监听类必须实现ActionListener接口,在actionPerformed方法中完成事件的处理 列表框选择、单选复选框选择: - 产生ItemEvent事件对象,用addItemListener方法注册监听对象,监听类必须实现ItemListener接口,在itemStateChanged方法中完成事件的处理,24,常见事件处理(2),鼠标点击: - 产生MouseEvent事件对象,用addMouseListener方法注册监听对象,监听类必须实现MouseListener接口,在mouseClicked方
15、法中完成事件的处理 鼠标移动: - 产生MouseEvent事件对象,用addMouseMotionListener方法注册监听对象,监听类必须实现MouseMotionListener接口,在mouseMoved方法中完成事件的处理,25,适配器类,由于有的监听接口处理多种事件,定义的抽象方法较多。因而当我们直接实现这些接口时,需要完成所有的方法,这是比较麻烦又没有必要的。为了方便使用,java.awt.event提供了一组适配器类(Adapter) 这是一组抽象类,它们实现了相应的监听接口,但所有的方法都是空方法,没有具体语句。使用时,我们派生出自己的适配器类,然后只需重写所需要的事件处理
16、方法,不再要求完成所有的方法,26,适配器类,27,举例,实现MouseListener,要实现的方法 mouseEntered mouseExited mouseClicked mousePressed mouseReleased,28,AWT组件,29,AWT组件Component类,表示所有组件的抽象类,定义了所有组件的公共方法: -public void add(PopopMenu popup); -public Color getBackground(); -public Font getFont(); -public Graphics getGraphics(); -public
17、void repaint(); -public void setEnabled(boolean b); -public void setVisible(boolean b); -public void setSize(int width,int height); -,30,AWT组件标签(Label),标签是用户不能修改的文本提示框,表示标签的类为Label,创建方法为: Label lb=new Label(“hello”); 可通过getText()和setText(String)方法读取和设置提示框文本,不产生特殊事件,Frame f=new Frame(“Label”); Label
18、lb=new Label(“Hello”); f.add(lb);,31,AWT组件按钮(Button),按钮是常用的功能组件,表示按钮的类为Button,创建方法为: Button btn=new Button(“OK”); 可通过getLabel()和setLabel(String)方法读取和设置按钮文字,可产生ActionEvent事件,Frame f=new Frame(“SampleButton”); Button btn=new Button(“Sample”); btn.addActionListener(this); f.add(btn);,32,动作事件(ActionEven
19、t),btn.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) System.out.println(Button press received.); System.out.println(Buttons action command is: + e.getActionCommand(); );,匿名内部类,33,事件处理的4种写法,匿名内部类写法 如前页,建立了一个继承于ActionListener的类,但没有给这个类命名,并且没有用通常的写法,而是直接在btn.addActio
20、nListener方法中写下类的代码 优点:代码简单方便 缺点: 事件处理代码会随着组件一起分散在代码的各部分,不够集中,导致代码阅读与维护上的不便 各事件的处理全部由嵌套的程序块组成,视觉上会显示有些乱 当工具栏、菜单栏等也需要处理相同的用户行为时,无法重用事件中的处理代码,导致代码不够简洁。,34,事件处理的4种写法,命名内部类写法 解决匿名内部类存在的问题 事件处理代码都集中在一起,并且都具有有意义的名称,程序容易阅读与维护 单个的事件处理程序可以被重用,35,事件处理的4种写法,class MyButton1 btn.addActionListener(new MyButtonClic
21、k() ); static final class MyButtonClick implements ActionListener public void actionPerformed(ActionEvent e) System.out.println(Button press received.); System.out.println(Buttons action command is: + e.getActionCommand(); ,36,事件处理的4种写法,外部类写法 写法与命名内部类相似,只不过将类从原来的文件中拿出来,单独写成一个类文件。这种写法有和内部命名类一样的优点,但因为
22、要单独写成一个文件,写起来要麻烦些。 MyButton2,37,事件处理的4种写法,实现监听接口的写法 类实现监听接口,这样类本身就成了监听器,这样使得加入监听器的代码可以更简洁。 适合加入监听器的组件较多,并且要求监听器的事件处理代码可以被组件共用 缺陷:事件方法和其他方法混合在了一起,容易引起误读,应该在事件方法前加入详细的注释说明 MyButton3,38,事件处理的4种写法,public class MyButton3 implements ActionListener MyButton3() btn.addActionListener(this); public void actio
23、nPerformed(ActionEvent e) System.out.println(Button press received.); System.out.println(Buttons action command is: + e.getActionCommand(); ,39,事件处理的4种写法-总结,匿名内部类方式写起来要方便些,但不适合事件代码太长、太多的情况 从代码书写、阅读、维护以及程序的可扩展性角度看,命名内部类写法最值得推荐。 外部类的写法主要是为了代码重用才考虑使用,如果包以外的类要用到此事件处理代码,比较适合。 实现监听接口的写法适合于要求组件都可以共用事件代码时用,
24、40,在事件代码中如何访问类中的变量,方法一:加final修饰符,public class AccessVariable1 extends Frame AccessVariable1(String s) final Label lbl = new Label(zhengyu); btn.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) lbl.setText(ButtonClicked); ); ,41,在事件代码中如何访问类中的变量,方法二:将变量变成实例变量,但这种方法扩大了变
25、量的有效范围,public class AccessVariable2 extends Frame Label lbl = new Label(zhengyu); AccessVariable2(String s) btn.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) lbl.setText(ButtonClicked); ); ,42,在事件代码中如何访问类中的变量,方法三:将事件代码写成命名内部类、,然后通过构造函数的参数来传入,较繁琐, btn.addActionList
26、ener(new ButtonClicked(lbl); class ButtonClicked implements ActionListener Label lbl; ButtonClicked(Label l) lbl=l; public void actionPerformed(ActionEvent e) ,43,AWT组件文本框与文本区域,Java提供了两种用于文本处理的组件:单行文本框(TextField)和多行文本区域(TextArea)。创建文本组件的语句为: TextField tf=new TextField(16); TextArea ta=new TextArea(1
27、0,40); setText()/getText()方法:设置和获取文本组件的显示内容; setEditable()方法:设置是否允许用户编辑 isEditable()方法:判断是否可编辑。,44,AWT组件文本框与文本区域,相同的方法: -public String getSelectedText() -public String getSelectedStart() -public String getSelectedEnd() -public void select(int start,int end) TextField的特性: -public void setEchoChar(cha
28、r ch) TextArea的特性: -public void appendText(String text) -public void insertText(String newtext,int position) -public void replaceText(String str,int start,int end) -public int getColumns() -public int getRows(),45,文本事件(TextEvent),当用户修改文本框和文本区域中的内容时,会产生文本事件。Java中用TextEvent对象表示文本事件。要处理文本事件,需用addTextLi
29、stener()方法注册事件监听对象,监听对象所在的类应该实现TextListener接口,并在textValueChanged()方法中完成事件处理代码 当用户在文本框中输入回车时,会产生动作事件ActionEvent,46,AWT组件单、复选按钮,f=new Frame(“SampleCheckbox”); one=new Checkbox(“One”,true); two=new Checkbox(“two”,false); three=new Checkbox(“Three”,false); one.addItemListener(this); two. addItemListener
30、(this); three. addItemListener(this); f.setLayout(new FlowLayout(); f.add(one); f.add(two); f.add(three);,常用方法: boolean getState() setState(boolean) String getLabel() setLabel(String),47,AWT组件单、复选按钮,f=new Frame(“CheckboxGroup”); cbg=new CheckboxGroup(); one=new Checkbox(“One”,cgb,false); two=new Che
31、ckbox(“two”,cgb,false); three=new Checkbox(“Three”,cgb,true); one.addItemListener(this); two. addItemListener(this); three. addItemListener(this); f.setLayout(new FlowLayout(); f.add(one); f.add(two); f.add(three);,48,AWT组件下拉框Choice,f=new Frame(“SampleChoice”); choice=new Choice(); choice.addItem(“F
32、irst”); choice.addItem(“Second”); choice.addItem(“Third”); choice.addItemListener(this); f.add(choice,BorderLayout.CENTER);,49,AWT组件下拉框Choice,常用方法: add(String) addItem(String) int getSelectedIndex() String getSelectedItem() insert(String,int) remove(int) Remove(String) removeAll(),50,AWT组件列表框List,f=
33、new Frame(“SampleList”); List lst=new List(4,true); lst.add(“Hello”); lst.add(“There”); lst.add(“How”); f.add(lst,”Center”);,常用方法同Choice: int getSelectedIndexs() String getSelectedItems(),51,选择事件(ItemEvent),当单选按钮、复选按钮、下拉框、列表框的内容被选中时,将产生选择事件。用addItemListener()注册监听对象,监听对象的类实现ItemListener接口,并在itemState
34、Changed()方法完成处理 getItem()方法可得到用户操作的选择项 getSelectable()可得引发选择事件的事件源对象 双击列表框内容,还可产生动作事件,52,选择事件(ItemEvent),public void itemStateChanged(ItemEvent arg0) Checkbox cb=(Checkbox)arg0.getItemSelectable(); if (cb.getState() System.out.println(cb.getLabel()+ is enabled.); else System.out.println(cb.getLabel(
35、)+ is disanabled.); ,public void itemStateChanged(ItemEvent arg0) System.out.println(Choice)arg0.getItemSelectable().getSelectedItem(); ,53,调整事件(AdjustmentEvent),当用户改变滚动条的滑块位置时,将产生调整事件,Java中用AdjustmentEvent对象表示调整事件。用addAdjustmentListener()注册,监听对象的类要实现AdjustmentListener接口,并在adjustmentValueChanged()方法中处理 getAdjustmentType()可得到事件发生的细节,getValue()可得到滑块的位置,54,鼠标、键盘事件,当用户移动鼠标、按下鼠标按键或敲击键盘时,将产生鼠标或键盘事件,Java中分别以MouseEvent和KeyEvent对象表示。两种事件都继承自InputEvent. InputEvent提供了getModifiers()方法,可获得事件发生时的细节,比如鼠标按键时的键位,敲击键盘是否同时按下alt或ctrl键等。所有的awt组件都能成为鼠标或键盘事件的事件源,55,AWT组件菜单条MenuBar,f=new Frame(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年军迷用品项目合作计划书
- 2025年电冰箱塑料产品项目可行性研究报告
- 2025年熔断器项目可行性研究报告
- 2025年海霸鱼油项目可行性研究报告
- 2025年水霉清水产养殖用药项目可行性研究报告
- 2025年橡塑复合密封件项目可行性研究报告
- 2025年柔光白板项目可行性研究报告
- 2025年杜邦棉被项目可行性研究报告
- 2025年机械全自动砌块成型机项目可行性研究报告
- 2025年有机乳液产品项目可行性研究报告
- 冠脉介入进修汇报
- 沪教牛津八下Unit-3-Fishing-with-Birds2市公开课一等奖省赛课微课金奖课
- PDCA提高卧床患者踝泵运动的执行率
- 月考(Unit 1-2)(试题)-2023-2024学年人教PEP版英语三年级下册
- 汕头市金平区2024年数学八年级下册期末检测试题含解析
- 胸痛的护理诊断及措施
- 英语演讲与口才课程介绍
- 超声危急值课件
- 河南应用技术职业学院单招《职业技能测试》参考试题库(含答案)
- 2024年包头钢铁职业技术学院高职单招(英语/数学/语文)笔试题库含答案解析
- 高中预防校园欺凌
评论
0/150
提交评论