Java面向对象程序设计第10章-图形界面2_第1页
Java面向对象程序设计第10章-图形界面2_第2页
Java面向对象程序设计第10章-图形界面2_第3页
Java面向对象程序设计第10章-图形界面2_第4页
Java面向对象程序设计第10章-图形界面2_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

掌握常用事件和方法按钮、文本框窗口事件鼠标事件键盘事件补充:对话框主要内容10.6

开发步骤java界面应用程序的开发步骤:创建界面,设置布局,添加控件实现监视器(或者叫监听器)类实现某个监视接口,监视器类提供的信息包括监听的事件类型以及响应动作为控件注册监视器实现控件对象和监视器对象关联10.6

事件、事件源和事件监听器事件、事件源和事件监听器事件是由事件源产生的,事件的产生者称为事件源。例如,在Button组件上点击鼠标会产生以这个Button为源的一个事件:ActionEvente事件监听器是一个类的实例,这个类实现了一个特殊的接口,称为Lintenerinterface。当事件源产生了一个事件以后,事件源就会发送通知给相应的事件监听器,监听器对象根据事件对象内封装的信息,决定如何响应这个事件10.6

事件处理模型10.7按钮、菜单、文本框事件5文本框(输入字符)+回车按钮 点击菜单项 点击ActionEvent事件ActionListener接口{actionPerformed(ActionEvent)}MyActionListener类{actionPerformed(ActionEvent)}处理实现注册myButton.addActionListener(newMyActionListener());10.7实现监听接口的三种实现方式MyActionListener的实现方式在MyJFrame类体外实现P217,例10.4在MyJFrame类体内,通过内部类实现P220,例10.6在MyJFrame类体内,通过匿名类实现(P139,匿名类)P220,例10.66text3.addActionListener(

new

ActionListener(){ publicvoidactionPerformed(ActionEvente){ …..//本次事件处理的方法体

} });回顾:该匿名类会生成一个类,该类实现了ActionListener接口,重写了接口内的所有方法,并且生成一个匿名类的对象作为本次注册的监听器参数(对象)思考:为什么使用new和分号?10.7.1

按钮事件按钮(JButton对象)发生ActionEvent事件增加对按钮的事件处理函数(监听器监听ActionEvent事件)button.addActionListener(实现ActionListener接口的对象);ActionEvent()类使用的主要两个方法(1)getSourse()方法:用来获得引发事件的对象名(2)getActionCommand()方法:用来获得引发事件动作的命令名按钮事件_例1publicclassEventDemoextendsJFrame{ JButtonjb=newJButton("鸣枪");JPaneljpanel=newJPanel();publicEventDemo(){ this.add(jpanel); jpanel.add(jb); //myEvente=newmyEvent(); jb.addActionListener(newmyEvent()); this.setSize(200,200); this.setVisible(true); } publicstaticvoidmain(Stringargs[]){ newEventDemo();}}classmyEventimplementsActionListener{ publicvoidactionPerformed(ActionEventarg0){ JOptionPanejo=newJOptionPane(); jo.showConfirmDialog(null,"标题",

"内容",-1); System.out.println("一个健步跨出去了"); }}按钮事件_例2publicclassEventDemoextendsJFrameimplementsActionListener{ JButtonjb=newJButton("+"); JTextFieldt3=newJTextField(10); JTextFieldt2=newJTextField(10);JTextFieldt1=newJTextField(10); JPaneljpanel=newJPanel(); publicEventDemo(){ this.add(jpanel); jpanel.add(jb);jpanel.add(t1);jpanel.add(t2);jpanel.add(t3); jb.addActionListener((ActionListener)this);//使用当前窗口做监视器(事件源所在的类的实例) this.setSize(200,200); this.setVisible(true); } publicvoidactionPerformed(ActionEventarg0){ t3.setText(t2.getText()+t1.getText()); } publicstaticvoidmain(Stringargs[]){ newEventDemo(); }}按钮事件_例3publicclassEventDemoextendsJFrameimplementsActionListener{ JTextFieldt3; JTextFieldt2;JTextFieldt1; JButtonjb1=newJButton(“+"); JButtonjb2=newJButton(“-"); JButtonjb3=newJButton(“*"); JButtonjb4=newJButton(“/"); JPaneljpanel=newJPanel();publicEventDemo(){ this.add(jpanel); jpanel.add(t1);jpanel.add(t2);jpanel.add(t3); jpanel.add(jb1);jpanel.add(jb2);jpanel.add(jb3);jpanel.add(jb4); jb1.addActionListener(this);jb2.addActionListener(this);jb3.addActionListener(this);jb4.addActionListener(this); this.setSize(200,200); this.setVisible(true); } publicvoidactionPerformed(ActionEventarg0){ doublea=Integer.parseInt(t1.getText()); doubleb=Integer.parseInt(t2.getText());

if(arg0.getActionCommand().equals(“+")){ t3.setText(String.valueOf(a+b));//String.valueOf(a)是由a生成一个字符值和a相同的String对象

} } publicstaticvoidmain(Stringargs[]){ newEventDemo(); }}按钮事件_说明publicvoidactionPerformed(ActionEventarg0){ doublea=Integer.parseInt(t1.getText()); doubleb=Integer.parseInt(t2.getText());

//arg0.getActionCommand()获取组件的标签名字符文字

if(arg0.getActionCommand().equals("+")){ t3.setText(String.valueOf(a+b)); }

//arg0.getSource()获取组件对象

if(arg0.getSource().equals(button))

{ t3.setText(String.valueOf(a+b)); } }10.7.2

菜单事件菜单项(JMenuItem对象)也可以发生ActionEvent事件增加菜单栏、增加菜单、增加菜单项menuBar.add(menu);menu.add(menuItem);增加对菜单的事件处理函数(监听器监听ActionEvent事件)menuItem.addActionListener(实现ActionListener接口的对象);10.8窗口事件JFrame对象是窗口事件(WindowEvent)的事件源,我们要指定一个监听器对象:MyWindowListenerlistener=...;frame.addWindowListener(listener);

监听器对象要实现WindowListener接口。WindowListener接口中共有七个方法,它们分别对应七个窗口事件:publicinterfaceWindowListener{ voidwindowOpened(WindowEvente); voidwindowClosing(WindowEvente); voidwindowClosed(WindowEvente); voidwindowIconified(WindowEvente); voidwindowDeiconified(WindowEvente); voidwindowActivated(WindowEvente); voidwindowDeactivated(WindowEvente);}

10.8窗口事件WindowListener接口实现方法一:定义一个类来实现WindowListener接口,在感兴趣的方法中添加我们需要的代码,然后让其他方法为空即可。classQuitWindowimplementsWindowListener{publicvoidwindowClosing(WindowEvente){ System.exit(0);}voidwindowOpened(WindowEvente){}voidwindowClosed(WindowEvente){}voidwindowIconified(WindowEvente){}voidwindowDeiconified(WindowEvente){}voidwindowActivated(WindowEvente){}voidwindowDeactivated(WindowEvente){}}1410.8

窗口事件WindowListener接口实现方法二:Java为每个具有多个方法的AWT监听器接口提供了一个适配器类。与WindowListener接口对应的WindowAdapter类实现了以上七个空方法,我们只需要通过扩展适配器类来实现我们感兴趣的方法classQuitWindowextendsWindowAdapter{PublicvoidwindowClosing(WindowEvente){ System.exit(0); }}1510.9

鼠标事件MouseListener接口处理的鼠标事件:mouseClicked(MouseEvent

e)鼠标按键在组件上单击(按下并释放)时调用mouseEntered(MouseEvent

e)

鼠标进入到组件上时调用mouseExited(MouseEvent

e)

鼠标离开组件时调用mousePressed(MouseEvent

e)

鼠标按键在组件上按下时调用mouseReleased(MouseEvent

e)

鼠标按钮在组件上释放时调用10.9

鼠标事件MouseMotionListener接口处理的鼠标事件:mouseDragged(MouseEvent)

鼠标拖动触发的事件mouseMoved(MouseEvent)

鼠标移动触发的事件鼠标事件案例importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;

public

class

MouseTest

extendsJFrameimplementsMouseListener,MouseMotionListener{//定义组件,命名,初始化;…..}

public

voidmouseClicked(MouseEventme){}

public

voidmousePressed(MouseEventme){txtStatus.setText("按下");}

public

voidmouseEntered(MouseEventme){txtStatus.setText("移入");}

public

voidmouseExited(MouseEventme){txtStatus.setText("移出");}public

voidmouseReleased(MouseEventme){txtStatus.setText("释放");}

public

voidmouseMoved(MouseEventme){intX=me.getX();intY=me.getY();txtX.setText(String.valueOf(intX));txtY.setText(String.valueOf(intY));}

public

voidmouseDragged(MouseEventme){}

public

static

voidmain(String[]args){MouseTestmed=newMouseTest();

}}10.10

焦点事件如果某个组件能够接收用户按键,那么该组件就拥有焦点。拥有焦点的组件在显示形式上与其他组件有一些差别:文本域内会显示光标;按钮四周会显示一个由虚线组成的矩形框焦点事件:FocusEventeFocusListener接口focusGained(FocusEvente)组件获得焦点时调用focusLost(FocusEvente)组件失去焦点时调用注意:组件的焦点发生变化时,监视器便调用以上的方法10.11

键盘事件当一个组件处于激活状态,如果按下、释放或敲击键盘上的一个键的时候,这个组件就触发了键盘事件KeyListener接口中有三个方法:publicvoidkeyPressed(KeyEvent

e)publicvoidkeyReleased(KeyEvent

e)publicvoidkeyTyped(KeyEvent

e)KeyEvent类的常用方法:getKeyCode()返回键码值getKeyChar()返回字符getModifiers()处理复合键情况例KeyEvent_Example.java10.12

Swing界面开发通过GUI技术开发的有点:开发周期短界面提示接口和控件信息,开发过程直观明了Swing界面的控件添加和事件处理SWT界面的控件添加和事件处理要实现以上技术,需要下载一些eclipse组件,如SWT_Designer,本实验所使用的eclipse为绿色版,已经手动添加过SWT_Designer,如果在自己原有的eclipse上添加该软件,请参考“SWT图形用户界面”2110.12Swing界面开发例实现按钮、文本框和菜单的ActionEvent事件处理、窗口事件处理、鼠标事件处理和键盘事件处理1、在所选的项目上“右键,新建,其它”2、依次选择“Designer,Swing,JFrame”3、设置窗口的各种参数,包括布局管理器、title和其它属性4、将需要的组件拖入窗口5、设置各个组件的消息处理6、右键单击设置各种处理事件(Key、Mouse等)2223事件处理总结Event-事件EventSource-事件源Eventhandler-事件处理者事件发生的场所,通常就是各个组件,例如按钮Button接收事件并对其进行处理的对象事件补充内容:对话框在Windows平台下用MessageBox来实现和用户的交互功能,在JAVA中也有同样的类来实现这样的功能,利用Swing中提供的JOptionPane类。四个标准对话框如下:MessageDialog(消息对话框) 用来显示信息给用户。ConfirmDialog(确认对话框) 提出问题,然后由用户自己来 确认(按"Yes"或"No"按钮)InputDialog(输入对话框) 提示输入文本。OptionDialog(选项对话框) 组合其它三个对话框类型。消息对话框消息对话框是一个简单的显示消息的窗口,只是给用户提供提示信息。如图所示消息对话框:消息对话框可以通过调用JOptionPane类的showMessageDialog(Compont,Object)方法来创建,参数是父组件和字符串(或者组件、显示的图标)。如以下语句创建一个显示简单字符的消息对话框:

JOptionPane.showMessagDialog(null,”WelcomeToQinghuaIT…”);还可以使用showMessageDialog(Component,Object,String,int)方法来创建一个显示警告消息的对话框,可以自己设置想要显示的消息对话框的标题。用法同showInputDialog()方法,参数相同但无返回值。如以下语句创建一个消息输入对话框:

JOptionPane.showMessagDialog(null,”文件被删除”,”删除警告”,JOptionPane.WARNING_MESSAGE);确认对话框创建确认对话框的最简单方法就是调用showConfirmDialog(Component,Object)方法,参数意义同消息对话框中的参数相同。 不同的是该方法返回一个整数,JOptionPane的三个属性:YES_OPTIONNO_OPTIONCANCEL_OPTION示例

importjava.awt.*; importjavax.swing.*; importjava.awt.event.*; importjava.util.EventListener; publicclassMessageDialogAppextendsJFrameimplementsActionListener{ JButtonbutton1=newJButton("显示消息对话框一"); JButtonbutton2=newJButton("显示消息对话框二"); publicMessageDialogApp(){ super("MessageDialog示例"); this.setLayout(newFlowLayout()); button1.addActionListener(this);

button2.addActionListener(this); this.add(button1); this.add(button2); this.setSize(180,160); this.show(); } publicstaticvoidmain(Stringargs[]){ newMessageDialogApp(); } publicvoidactionPerformed(ActionEvente){ if(e.getSource()==button1){ JOptionPane.showMessageDialog(null,"WelcomeToQinghuaIT..."); } if(e.getSource()==button2){ JOptionPane.showMessageDialog(null,"出现错误", "错误警告",JOptionPane.WARNING_MESSAGE); } } }输入对话框输入对话框提出一个

温馨提示

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

评论

0/150

提交评论