用户在窗体上对组件进行一定动作,比如鼠标点击,会产生一些相应的事件,如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. 0009_if控制语句

    1.if 条件:                   (判断相等一定注意要用 ==  而不是 =) 代码块 else: 代码块 2.if 条件一: 代码块 elif 条件二: 代码块 elif 条件三 ...

  2. [51nod1094]和为k的连续区间

    法一:暴力$O({n^2})$看脸过 #include<bits/stdc++.h> using namespace std; typedef long long ll; ],sum[]; ...

  3. Wannafly 锁

    题意: 现在有 $n$ 个人,每个人有一个已然给定的重要度 $a_i$,现有 K 个锁,每个锁有若干钥匙,分配给一些人,要求一群人能够打开全部 $K$ 把锁, 当且仅当他们重要度的和大于等于 $m$, ...

  4. ubuntu server usb安装盘制作问题

    本来服务器上装的是windows server 2003,开多个虚拟机装linux来用,但发现不管是vmware还是virtualbox,总是有内存泄漏,大约2个星期左右16G内存就全没了,任务管理器 ...

  5. 20169219《linux内核原理与分析》第六周作业

    网易云课堂学习 1.intel x86 CPU有四种不同的执行级别0-3,linux只使用了其中的0级和3级分贝来表示内核态和用户态. 2.一般来说在linux中,地址空间是一个显著的标志:0xc00 ...

  6. C#事件2

    今天又来说一下C#中的事件,为什么会有这个又呢?一个是因为以前写过一篇关于事件的东西,二来呢是因为感觉接口这个东西完全可以替换委托来写事件.因为这两个方面的原因,重新过了一遍C#中的事件. 事件这个东 ...

  7. UE4简单实现描边高亮效果

    材质文件下载地址: 链接:https://pan.baidu.com/s/10HUmXR_YNMOTF-Cg4ybuUg 提取码:m1my 1. 将材质文件放到Content目录中 2. 在项目中添加 ...

  8. 51nod1419 【数学】

    思路: n<=3,就是n. 考虑n>3: 我们可以轻松证明n,n-1这两个数互质: 设gcd(n,n-1)=g,n=g*k1,n-1=g*k2; n-(n-1)=g(k1-k2)=1; 所 ...

  9. .NET ToString() format格式化字符串(常用)

    前言 我们平常会用到货币数据类型,尤其当我们计算金钱或者算数的时候经常会遇到保留几位小数,而且碰到日期格式问题的时候,经常不知道选择什么样的格式比较合适,下面我找了一部分常用的.NET ToStrin ...

  10. C#之抽象类、虚方法、重写、接口、密封类

    前言    学了这么长时间的C#,我想说对于这个东东还是不是特别了解它,以至于让我频频郁闷.每次敲代码的时候都没有一种随心所欲的感觉.所以不得不在网上搜集一些资料,look 了 look~ 内容   ...