用户在窗体上对组件进行一定动作,比如鼠标点击,会产生一些相应的事件,如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. WSGI 简介(使用python描述)

    WSGI 简介 背景 Python Web 开发中,服务端程序可以分为两个部分,一是服务器程序,二是应用程序.前者负责把客户端请求接收,整理,后者负责具体的逻辑处理.为了方便应用程序的开发,我们把常用 ...

  2. 图像滤波与OpenCV中的图像平滑处理

    .About图像滤波 频率:可以这样理解图像频率,图像中灰度的分布构成一幅图像的纹理.图像的不同本质上是灰度分布规律的不同.但是诸如"蓝色天空"样的图像有着大面积近似的灰度强度,而 ...

  3. Java 常见注解

    @Retention 1.RetentionPolicy.SOURCE —— 这种类型的Annotations只在源代码级别保留,编译时就会被忽略2.RetentionPolicy.CLASS —— ...

  4. cygwin主要命令

    基本操作命令: ---------------------------------------------------------------------- --------------------- ...

  5. 机器学习--PCA降维和Lasso算法

    1.PCA降维 降维有什么作用呢?数据在低维下更容易处理.更容易使用:相关特征,特别是重要特征更能在数据中明确的显示出来:如果只有两维或者三维的话,更便于可视化展示:去除数据噪声降低算法开销 常见的降 ...

  6. NIO 之阻塞IO和非阻塞IO(转载)

    阻塞模式 IO 我们已经介绍过使用 Java NIO 包组成一个简单的客户端-服务端网络通讯所需要的 ServerSocketChannel.SocketChannel 和 Buffer,我们这里整合 ...

  7. lj的锁

    lj的锁 Lj花很大力气设计了一个锁,有一天,lj用这个锁把lbn锁在了一个小房间里,准备把lbn啊掉,现在lbn要逃出这个房间,他需要解开这个锁.在平面上有n个钉子,第i个钉子的位置是(x[i],0 ...

  8. C#网络编程学习(5)---Tcp连接中出现的粘包、拆包问题

    本文参考于CSDN博客wxy941011 1.疑问 我们使用第四个博客中的项目. 修改客户端为:连接成功后循环向服务器发送从1-100的数字.看看服务器会不会正常的接收100次数据. 可是我们发现服务 ...

  9. AT2341 Increasing Numbers

    传送门 还是猜结论呢 然后我们就想我们可以每次去掉尽量多的位数来保证次数最小,假装这是对的,先写一发,A了 考虑如何去掉尽量多的位数,我们可以找到最大的几位的不下降序列,把最后一个-1,后面全部改成9 ...

  10. thinkphp5.1常量定义使用

    thinkphp5.1取消了系统常量 可以把常量配置在app.php文件中 //配置网站地址 'WEB_URL'=>'http://127.0.0.1/tp5', 可以使用config()函数直 ...