概述
第14章 事件处理
事件处理技术是用户界面程序设计中由该命令按钮来完成相对应的操作。
14.1 Java语言的事件处理机制——委托事件模型
用户在图形用户界面中输入命令是通过键盘或对特定图形界面元素(如按钮)单击鼠标来实现的,为了能够接收用户命令,界面系统首先应该能够识别这些鼠标或键盘的操作并做出相应的响应。
通常一个键盘或一个鼠标操作会引发一个系统预先定义好的事件,用户只需要编写好程序代码,定义每个事件发生时程序应该执行的响应即可。这些代码将在他们对应的事件发生时由系统自动调用,这就是图形用户界面程序设计中事件和事件响应的基本原理。
1.基本概念
1)事件
所谓事件,就是用户使用鼠标或键盘对窗口中的组件进行交互时发生的事情。事件可以由外部用户操作触发,也可以由操作系统触发。事件用于描述发生了什么事情,对这些事情做出响应 的程序,称为事件处理程序。
2)事件源
所谓事件源,就是能够产生事件的对象,如按钮、文本框、键盘等。
3)事件监听者
Java程序把对事件进行处理的方法放在一个类对象中,这个类对象就是事件监听者,简称监听者。事件源通过调用响应的方法将某个对象设置为自己的监听者,监听者有专门的方法处理事件。
4)事件处理程序
java语言的java.awt.event包和javax.swing.event包中包含了许多用来处理事件的接口和类。用于事件处理方法的类就声明在这些接口和类中。这些包含所有处理方法 的接口称为监听者接口,包含所有事件处理方法的类称为适配器。
2.委托事件模型
在Java语言中对事件的处理,采用的是委托事件模型机制。委托事件模型是将事件源和对事件事件做出的具体处理分离开来。一般情况下,组件不处理自己的事件,而是将事件处理委托给外部的处理实体(监听者),这种事件处理模型就是事件的委托处理模型,即事件源将事件处理任务委托给了监听者。
委托事件模型中可以有多个事件监听者,使得不同的组件可以重复执行同样 的事件处理程序。当事件发生时,所有注册的监听者都可以嗲用与其相应的事件处理程序。
//filename:APp14_1.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class App14_1 extends JFrame implements ActionListener
{
static App14_1 frm=new App14_1();
static JButton bt=new JButton("set font's color");
static JTextArea ta=new JTextArea("font's color",5,20);
public static void main(String[] args)
{
bt.addActionListener(frm);
frm.setTitle("operation events");
frm.setLayout(new FlowLayout());
frm.setSize(260,170);
frm.add(ta);
frm.add(bt);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
ta.setForeground(Color.RED);
}
}
14.2 Java语言的事件类
在dEventObject类中定义非常有用的方法getSource(),该方法的功能是从事件对象中获取触发事件的事件源,为编写事件处理的代码提供方便。该方法的格式如下:
public Object getSource()
不论事件是任何对象,该方法返回的都是Object类的对象,开发人员需要自己编写代码进行对象的强制类型转换。
对于每一个事件类,几乎都有相应的事件监听者。事件监听者的接口一般位于java.awt.event或javax.swing.event包中。监听者接口规定了处理相应事件必须实现的基本方法。因此,实际处理使事件的事件监听者所对应的类一般是实现了这些事件监听者接口的类。
14.3 适配器类
通过实现监听者接口XXXLIstener来完成事件处理时,尽管某些方法都没有用到,但也要同时实现该接口中的所有方法。
但有时只是需要对其中的某些方法进行处理,而不想实现所有的无关方法。为了方便起见,Java语言为某些监听者接口提供了适配器类,XXXAdapter。当需要对某种事件进行处理时,只需让事件处理类继承事件所对应的适配器类,这样只需覆盖本次操作用到的事件处理方法即可,而不必实现无关的事件处理方法。
适配器是一个类而不是接口,因而处理事件的类只能继承一个适配器类。
14.4 命令按钮及相应的事件处理
命令按钮所触发的事件是动作事件。动作事件类ActionEvent,也称为操作事件类,当用户在当前窗口中单击按钮、选择菜单项、在文本框或文本区中输入文字后按Enter键等均能促发动作事件。此时触发事件的组件便把ActionEvent类的对象传递给向它注册的监听者,请它负责处理。
14.5 复选框、单选按钮及相应的事件处理
JRadioPerformed()、JCheckBox与JToggleButton除了与JButton一样都会触发ActionEvent操作事件外,JRadioButton、JCheckBox以及JToggleButton还会触发ItemEvent事件。
//filename:App14_5.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class App14_5 extends JFrame implements ItemListener
{
static App14_5 frm=new App14_5();
static JCheckBox chk1=new JCheckBox("bold");
static JCheckBox chk2=new JCheckBox("italics");
static JRadioButton rb1=new JRadioButton("red");
static JRadioButton rb2=new JRadioButton("blue");
static JTextArea ta=new JTextArea("Option how to use event class ItemEvent",8,30);
public static void main(String[] args)
{
ButtonGroup grp=new ButtonGroup();
frm.setTitle("deal with option event");
frm.setLocation(200,150);
frm.setSize(260,220);
frm.setLayout(new FlowLayout(FlowLayout.LEFT));
grp.add(rb1);
grp.add(rb2);
chk1.addItemListener(frm);
chk2.addItemListener(frm);
rb1.addItemListener(frm);
rb2.addItemListener(frm);
frm.add(chk1);
frm.add(chk2);
frm.add(rb1);
frm.add(rb2);
frm.add(ta);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
public void itemStateChanged(ItemEvent e)
{
Font font1=ta.getFont();
int style1=font1.getStyle();
if(rb1.isSelected()) ta.setForeground(Color.RED);
if(rb2.isSelected()) ta.setForeground(Color.BLUE);
if((e.getSource()==chk1)||(e.getSource()==chk2))
{
if(e.getSource()==chk1) style1=style1^1;
if(e.getSource()==chk2) style1=style1^2;
ta.setFont(new Font(font1.getName(),style1,font1.getSize()));
ta.append("n style 1 ="+style1+";"+" status = "+e.getStateChange()+"[1.pitch on;2.cancel]");
}
}
}
14.6 文本组件及相应的事件处理
文本组件所触发的事件主要有动作事件ActionEvent和文本变化事件CaretEvent。
//filename:App14_6.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class App14_6 extends JFrame implements ActionListener
{
private JLabel[] jlArray= {new JLabel("a"),new JLabel("p")};
private JTextField jName=new JTextField();
private JPasswordField jPassword=new JPasswordField();
private JTextArea jText=new JTextArea("I'm not editable right now",10,30);
private JScrollPane jsp=new JScrollPane(jText);
public App14_6()
{
this.setLayout(null);
jlArray[0].setBounds(20,10,20,25);
jName.setBounds(70,10,170,25);
jlArray[1].setBounds(20,10,20,25);
jPassword.setBounds(70,35,170,25);
jsp.setBounds(20,70,220,100);
jText.setEnabled(false);
jText.setDisabledTextColor(Color.RED);
this.add(jsp);
this.add(jlArray[0]);
this.add(jlArray[1]);
this.add(jName);
this.add(jPassword);
jName.addActionListener(this);
jPassword.addActionListener(this);
this.setTitle("Application of text components");
this.setResizable(false);
this.setBounds(100,100,280,220);
}
public void actionPerformed(ActionEvent e)
{
if(jName.getText().equals("abc")&&String.valueOf(jPassword.getPassword()).equals("123"))
{
jText.setEnabled(true);
jText.setText("Congradulations! I'm editable.!!");
jText.setLineWrap(true);
}
}
public static void main(String[] args)
{
App14_6 frm=new App14_6();
frm.setVisible(true);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
14.7 窗口组件以及窗口事件处理
Windows类的任何子类都能触发下列的窗口事件:打开窗口、正在关闭窗口、关闭窗口后、激活窗口、变成非活动窗口、最小化窗口和还原窗口。
14.8 对话框设计及相应的事件处理
对话框是应用程序与用户交互的手段之一,为了开发方便,Swing对对话框的开发提供了很好的环境。
用户可以通过使用JOptionPane类创建以下的四种标准对话框:
消息对话框——显示消息,只包含一个”确定“按钮;
确认对话框——显示问题,要求用户确认,包含一些可以进行选择的按钮;
输入对话框——显示问题,获取用户从文本框‘组合框或列表框的输入;
选择对话框——显示问题,从一组选项中进行选择,可以包含一组用户自定义的选择按钮。
14.9 按钮事件类及相应的事件处理
按钮事类件KeyEvent继承自InputEvent类。
14.10 鼠标事件类及相应的事件处理
鼠标事件MoutseEvent是一些常见的鼠标操作。如用数百哦单击事件源、鼠标指针进入或离开事件源、或移动’拖动鼠标等操作,均会触发鼠标事件。
14.11 列表框及相应的事件处理
列表框组件JList中显示出多个选项中显示出多个选项供用户选择,用户可以在列表框中选择一项或多个选项。并且列表框是不可被编辑的也甭能自动滚动。
14.12 组合框及相应的事件处理
组合框也称为下拉列表框,与列表框相似,它同样是一个有许多选项的选择组件,但组合框中的所有选项都被折叠收藏起来了,且只会将用户选择的单个选项显示在显示栏上。
14.13 菜单设计
每一个应用程序都会有菜单工具为用户的操作进行导航,用户利用菜单提供的选项来完成相应的功能。所以说菜单时非常重要的图形用户界面组件。
菜单通常有两种形式:一是窗口菜单,二是弹出式菜单。
14.13.1 窗口菜单
要创建一个菜单系统,首先要有一个框架JFrame,在框架中放置一个菜单栏对象JMenuBar,再在菜单栏上台南佳若干个菜单对象JMenu,每个菜单对象上再添加若干个菜单项。
14.13.2 弹出式菜单
除了上面介绍的窗口菜单外,Java语言还提供了弹出式菜单。当在某个组件上右击时,会弹出一个菜单供选择,弹出式菜单也称为快捷式菜单。
14.14 工具栏设计
在用户界面设计中,为了进行快速的访问,将一些常用的命令放在工具栏上,在工具栏上单击一个命令按钮要比从菜单中进行选择方便得多。
14.15 滑动条设计及相应的事件处理
滑动条是非常简单而常用的组件,它是一个水平或垂直的移动轴,其上有一个滑块可以让用户拖拽,滑条所在位置表示一个整数值。
14.16 文本选择对话框
文本选择对话框JFileChooser类是用户创建经常使用的“打开”或“保存”文件的对话框。所以它是一种用于文件选择的组件,文件选择对话框是一个独立的、可移动的窗口,允许用户在其中对文件进行访问操作。
14.17 颜色选择窗格
在许多情况下,用户希望能够选择一种颜色,当然有多种方式可以实现这种功能。
14.18 计时器
如果需要让程序按一定的事件顺序依次完成某项任务,就需要使用计时器Timer组件。
最后
以上就是冷傲冥王星为你收集整理的Java学习14——书本自学的全部内容,希望文章能够帮你解决Java学习14——书本自学所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复