用户在窗体上对组件进行一定动作,比如鼠标点击,会产生一些相应的事件,如ActionEvents,ChangeEvents,ItemEvents等,来响应用户的鼠标点击行为。通过实现ActionListener接口来监听这些事件并作出处理

1.if语句判断是哪个事件源

代码示例:

package actionEvent;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel; /**
* 在这个例子中,利用一个ActionListener来监听事件源产生的事件
* 用一些if语句来决定是哪个事件源
1. 新建一个组件(如JButton)。 2. 将该组件添加到相应的面板(如JPanel)。 3. 注册监听器以监听事件源产生的事件(如通过ActionListener来响应用户点击按钮)。 4. 定义处理事件的方法(如在ActionListener中的actionPerformed中定义相应方法)。
*/ public class ActionDemo
{
private static JFrame jframe;
private static JPanel jpanel;
private JButton button1;
private JButton button2; public static void main(String[] args){
jframe=new JFrame();
new ActionDemo();
jframe.add(jpanel);
jframe.pack();//根据组件大小自适应窗口大小
jframe.setVisible(true);//窗口可显示 //点击窗口关闭时退出应用程序
jframe.addWindowListener(new WindowAdapter(){
public void windowClosing(){
System.exit(0);
}
}); } public ActionDemo(){
jpanel=new JPanel();//实例化面板
button1=new JButton("按钮1");//实例化按钮
button2=new JButton("按钮2");
SimpleListener sl=new SimpleListener();//实例化监听类
button1.addActionListener(sl);//添加监听给按钮
button2.addActionListener(sl);
jpanel.add(button1);//按钮添加到面板
jpanel.add(button2); } private class SimpleListener implements ActionListener{
//实现此方法,实现窗体上发生点击按钮事件后的处理
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.out.println(e.getSource());
String butName=e.getActionCommand();
if(butName.equals("按钮1")){
JOptionPane.showMessageDialog(jframe, "按钮1被点击");
}else if(butName.equals("按钮2")){
JOptionPane.showMessageDialog(jframe, "按钮2被点击");
}else{
JOptionPane.showMessageDialog(jframe, "UnKnow event");
}
} } }

2.通过匿名内部类的方式注册监听

代码示例:

package actionEvent;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel; /**
* 在这个例子中,利用一个ActionListener来监听事件源产生的事件 ,用匿名内部类的方式
* 1. 新建一个组件(如JButton)。
*
* 2. 将该组件添加到相应的面板(如JPanel)。
*
* 3. 注册监听器以监听事件源产生的事件(如通过ActionListener来响应用户点击按钮)。
*
* 4. 定义处理事件的方法(如在ActionListener中的actionPerformed中定义相应方法)。
*/ public class ActionDemo {
private static JFrame jframe;
private static JPanel jpanel;
private JButton button1;
private JButton button2; public static void main(String[] args) {
jframe = new JFrame();
new ActionDemo();
jframe.add(jpanel);
jframe.pack();// 根据组件大小自适应窗口大小
jframe.setVisible(true);// 窗口可显示 // 点击窗口关闭时退出应用程序
jframe.addWindowListener(new WindowAdapter() {
public void windowClosing() {
System.exit(0);
}
}); } public ActionDemo() {
jpanel = new JPanel();// 实例化面板
button1 = new JButton("按钮1");// 实例化按钮
button2 = new JButton("按钮2");
button1.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JOptionPane.showMessageDialog(jframe, "按钮1被点击");
} });
button2.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JOptionPane.showMessageDialog(jframe, "按钮2被点击");
} });
jpanel.add(button1);// 按钮添加到面板
jpanel.add(button2); } }

3.给每一个组件创建一个监听器

代码示例:

package actionEvent;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel; /**
* 在这个例子中,利用一个ActionListener来监听事件源产生的事件 ,给每个组件建立一个监听
* 1. 新建一个组件(如JButton)。
*
* 2. 将该组件添加到相应的面板(如JPanel)。
*
* 3. 注册监听器以监听事件源产生的事件(如通过ActionListener来响应用户点击按钮)。
*
* 4. 定义处理事件的方法(如在ActionListener中的actionPerformed中定义相应方法)。
*/ public class ActionDemo {
private static JFrame jframe;
private static JPanel jpanel;
private JButton button1;
private JButton button2; public static void main(String[] args) {
jframe = new JFrame();
new ActionDemo();
jframe.add(jpanel);
jframe.pack();// 根据组件大小自适应窗口大小
jframe.setVisible(true);// 窗口可显示 // 点击窗口关闭时退出应用程序
jframe.addWindowListener(new WindowAdapter() {
public void windowClosing() {
System.exit(0);
}
}); } public ActionDemo() {
jpanel = new JPanel();// 实例化面板
button1 = new JButton("按钮1");// 实例化按钮
button2 = new JButton("按钮2");
button1.addActionListener(new but1Listener());
button2.addActionListener(new but2Listener());
jpanel.add(button1);// 按钮添加到面板
jpanel.add(button2); } private class but1Listener implements ActionListener{ @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JOptionPane.showMessageDialog(jframe, "按钮1被点击");
} }
private class but2Listener implements ActionListener{ @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JOptionPane.showMessageDialog(jframe, "按钮2被点击");
} } }

总结:这几种方式各有优缺,但实际差别不大,具体使用哪种根据程序复杂度以及具体场景而定

ActionListener 监听事件源产生的事件的更多相关文章

  1. JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件

    JAVA之旅(三十一)--JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件 有段时间没有更新JAVA了,我们今天来说一下JAVA中的图形化界面,也就是GUI ...

  2. iOS:使用代理模式监听开关状态改变事件

    记一次解决跨控制器监听开关状态改变的尝试. 为了统一设置UITableViewCell里的内容,自定义了UITableViewCell类的一个基类,命名为SettingCell.SettingCell ...

  3. JS移动端如何监听软键盘回车事件

    移动端经常项目中会有搜索之类的功能,一般实现的是按搜索按钮进行搜索,如果要像PC端一样实现按回车键进行搜索该怎么实现呢? 方法很简单,就是在搜索框的input外面套一个form标签  注意点:form ...

  4. Android如何监听蓝牙耳机的按键事件(转)

    源: Android如何监听蓝牙耳机的按键事件 写在前面: 直接想要代码很简单,你直接把滚动条拉到最底端就可以看到.如果想要十分地了解为什么,那就按照我规划的一步一步来理解.以下测试环境以手头上有的「 ...

  5. el-input监听不了回车事件

    vue使用element-ui的el-input监听不了回车事件,原因应该是element-ui自身封装了一层input标签之后,把原来的事件隐藏了,所以如下代码运行是无响应的: <el-inp ...

  6. 微信浏览器返回刷新,监听微信浏览器返回事件,网页防复制,移动端禁止图片长按和vivo手机点击img标签放大图片

    以下代码都经过iphone7,华为MT7 ,谷歌浏览器,微信开发者工具,PC端微信验证.如有bug,还请在评论区留言. demo链接:https://pan.baidu.com/s/1c35mbjM ...

  7. vue 定义全局函数,监听android返回键事件

    vue 定义全局函数,监听android返回键事件 方法一:main.js 注入(1)在main.js中写入函数Vue.prototype.changeData = function (){ aler ...

  8. js判断是否安装某个android app,没有安装下载该应用(websocket通信,监听窗口失去焦点事件)

    现在经常有写场景需要提示用户下载app, 但是如果用户已经安装,我们希望是直接打开app. 实际上,js是没有判断app是否已经安装的方法的,我们只能曲线救国. 首先,我们需要有call起app的sc ...

  9. vue使用element-ui的el-input监听不了回车事件解决

    vue使用element-ui的el-input监听不了回车事件,原因应该是element-ui自身封装了一层input标签之后,把原来的事件隐藏了,所以如下代码运行是无响应的: <el-inp ...

随机推荐

  1. HTTP返回码中301与302的区别

    一.官方说法 301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于: 301 redirect: 301 代表永久性转移(Permanently Moved). 302 ...

  2. Java有几种引用类型?

    有这样一类对象:当内存空间还足够,则可保留在内存中:如果内存空间在gc之后还是非常紧张,则可抛弃这些对象.很多系统的缓存功能适合这样的场景,所以jdk1.2以后 java将引用分为了强引用.软引用.弱 ...

  3. 14、SRA数据上传

    1.ncbi登陆,进入SRA,进入new submission 2. 1)SUBMITTER 2)PROJECT TYPE Raw sequence reads 和 ranscriptome or G ...

  4. 8、泛型程序设计与c++标准模板库2.4列表容器

    列表容器主要用于存放链表,其中的链表是双向链表,可以从任意一端开始遍历.列表容器是需要按顺序访问的容器.另外,列表容器不支持随机访问迭代器,因此某些算法不能适合于列表容器.列表容器还提供了另一种操作- ...

  5. hdu1099

    #include<iostream> using namespace std; __int64 gcd(__int64 a,__int64 b) { return b?gcd(b,a%b) ...

  6. linux 的 scp 命令

    linux 的 scp 命令 可以 在 linux 之间复制 文件 和 目录: ================== scp 命令 ================== scp 可以在 2个 linu ...

  7. Java基础 -- 泛型之泛型参数

    泛型机制常用的参数有3个: “?”代表任意类型.如果只指定了<?>,而没有extends,则默认是允许任意类. extends关键字声明了类型的上界,表示参数化的类型可能是所指定的类型,或 ...

  8. Android运行时Crash自动恢复框架-Recovery

    转自:http://zhengxiaoyong.me/2016/09/05/Android%E8%BF%90%E8%A1%8C%E6%97%B6Crash%E8%87%AA%E5%8A%A8%E6%8 ...

  9. VS插件开发(生成实体类)

    写了N年的代码,回头过来看,其中有80%代码都是重复的代码,深入研究VS插件开发,应用到工作中,让自己减少基础的代码开发,增加开发效率 1.新增解决方案: Extensiblity->VSIX ...

  10. Mol Cell Proteomics. |赵赟| 全面地分析个人尿蛋白质组学的变化揭示出不同的性别变化

    大家好,本周分享的是发表在Molecular & Cellular Proteomics上的一篇关于人的尿蛋白质组学的文章,题目是Comprehensive analysis of indiv ...