1、第五章 添加按钮和回车响应,本章学习要点:,了解Swing组件的事件种类;,熟悉Java事件处理机制;,5.1 需求分析,要求当我们点击“发送”按钮或按下回车键时,程序能够响应我们的操作,将文本框中的聊天信息发送出去。,5.2 确定任务单,任务:增加按钮和回车动作事件。,5.3 任务:添加按钮和回车事件,一、确定步骤:,二、分析步骤:,1、识别Java事件的机制,事件驱动编程,如果用户在用户界面层执行了一个动作(鼠标点击或按键),这将导致一个事件的发生。事件是描述发生了什么的对象。在Java中存在各种不同类型的事件类用来描述各种类型的用户交互。,Java事件处理机制,Java事件处理机制,事件
2、对象事件(Event)是用户对界面操作在java语言上的描述,以类的形式出现;,事件源事件源(Event Source)指事件发生的场所,通常就是各个组件。事件源是一个事件的产生者。,事件处理程序事件处理程序(Event handler)指接收事件对象并对其进行处理的对象。事件处理程序就是一个接收事件、解释事件并处理用户交互的方法。,事件类与事件监听接口,事件类Java将所有组件可能发生的事件进行分类,具有共同特征的事件被抽象为一个事件类AWTEvent.,委托事件模型由于同一个事件源上可能发生多种事件,因此java采取了委托事件模型(Delegation Model),事件源可以把在其自身所
3、有可能发生的事件分别授权给不同的事件处理者来处理。,事件监听接口,见书上列表,事件是只向注册的监听者报告的对象。每个事件都有一个对应的监听者接口,规定哪些方法必须在适合接收那种类型的事件的类中定义。实现了定义那些方法的接口的类可以注册为一个监听者,如图所示:,事件类与事件监听接口,2、识别点击按钮和回车动作事件的机制,Java动作(Action)事件ActionEvent事件处理框架,按钮事件及其处理方法ActionEvent事件:当单击按钮时产生的事件。,1)依靠ActionListener侦听事件,2)通过addActionListener(this) 设置侦听,3)重写public vo
4、id actionPerformed(ActionEvent e)方法,单击按钮时被呼叫执行。,文本框与文本域事件及其处理方法,ActionEvent事件:当在文件框中输入信息并按“回车键”时产生的事件。,1) 依靠ActionListener侦听事件,2) 通过addActionListener(this) 设置侦听,3) 重写public void actionPerformed(ActionEvent e)方法,在改变选定项时被呼叫执行。,下拉列表框事件及其处理方法JComboBox组件主要触发的事件有以下两种:,ActionEvent事件:当下拉列表被单击时触发的事件; ItemEve
5、nt事件:当从下拉列表框中选定时产生的事件;,(1)依靠ItemListener 侦听事件,(2)通过addItemListener(this) 设置侦听,(3)重写public void itemStateChanged(ItemEvent e)方法,在改变选定项时被呼叫执行。,JList事件及其处理方法,ListSelectionEvent事件:当从列表框中选定时产生的事件。,1) 依靠ListSelectionListener侦听事件,2) 通过addListSelectionListener(this) 设置侦听,3) 重写public void valueChanged(ListSe
6、lectionEvent e)方法,在改变选定项时被呼叫执行。,单选按钮和复选框事件及其处理方法,ItemEvent事件:当从列表框中选定时产生的事件。,1) 依靠ItemListener侦听事件,2) 通过addItemListener(this) 设置侦听,3) 重写public void itemStateChanged(ItemEvent e)方法,在改变选定项时被呼叫执行。,菜单设计、菜单事件及其处理方法,在Java中,一般菜单格式包含有菜单栏(JMenuBar)类、菜单(JMenu)类和菜单项(JMenuItem)类对象组成。,菜单栏(JMenuBar)类菜单(JMenu)类菜单项
7、(JMenuItem)类,菜单栏、菜单和菜单项的构造方法和常用方法,详见书上列表,制作菜单的一般步骤:,菜单设计、菜单事件及其处理方法,a) 创建一个JMenuBar对象并将其加入到JFrame; b) 创建JMenu对象; c) 创建JMenuItem对象并将其添加至JMenu对象中; d) 将JMenu对象添加到JMenuBar中。,菜单事件及其处理方法,JMenuItem触发的事件有很多种,主要包括如下两种: ActionEvent事件其在菜单被选中时触发; ChangeEvent事件JMenuItem状态变化时被触发。,例5.3.2-1:按钮组件的事件响应。完成单击“退出”按钮时能实现
8、窗口的关闭。,import java.awt.*;import java.awt. event.*;public class MyListener implements ActionListenerpublic MyListener()Frame f=new Frame(“Java程序设计基础“);Button btn=new Button(“退出“);/注册事件监听器对象btn.addActionListener(this);/将按钮增加到框架窗口上f.add(btn);f.setSize(300,300); f.setVisible(true);/当监听到有事件产生时,进行事件处理publ
9、ic void actionPerformed(ActionEvent e),System.exit(0);public static void main(String args)new MyListener(); ,程序输出结果:,【结果】在聊天室客户端窗口界面中点击相关命令按钮或在JTextField组件中按下回车时,都会触发动作事件。动作事件用ActionEvent类来表示。 ActionEvent的事件监听接口为ActionListener,所有实现了这个接口的类都可以对动作事件作出处理。 当然实现这个接口的类首先必须实现ActionListener接口中唯一的方法: public v
10、oid actionPerformed(ActionEvent e)要想让按钮或消息输入框(JTextField)在发出ActionEvent事件时能被实现了ActionListener接口的类处理,我们还必须将组件和事件处理类建立联系,也就是注册事件监听器。以下代码在按钮中注册一个事件监听器 jb_send.addActionListener(new AClass();,3、识别事件产生后的行为,发送消息/取得聊天信息String message = jtf_message.getText().trim();/将聊天信息显示在文本域JtextArea中jta_message.append(m
11、essage+“n“); 清空文本框内容jtf_message.setText(“”);,5.3.3 修改代码,/利用内部类实现ActionEvent事件处理jtf_message.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) processMessage(); /调用处理消息方法 );/利用内部类实现按钮事件jb_send.addActionListener(new ActionListener()public void actionPerformed(ActionEvent
12、e) processMessage(); );,/* 处理消息的方法*/ private void processMessage()String message = jtf_message.getText().trim();jta_message.append(message+“n“);jtf_message.setText(“);/* 主方法,程序入口* param args*/public static void main(String args) /主方法,程序入口Client client = new Client(); ,程序输出结果:,点击发送后的聊天室客户端界面,5.4 复习与提示,本章学习了Java中事件处理机制。Java中和事件相关的对象有:事件对象,事件源,事件处理程序。,ActionEvent(动作事件)是Java中最常见的事件。很多GUI组件会产生ActionEvent对象,如:按钮的点击,在文本框(JTextField)中按回车,选择组合框(JComboBox)的某个选项等。,