ActionListener 监听事件源产生的事件
用户在窗体上对组件进行一定动作,比如鼠标点击,会产生一些相应的事件,如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 监听事件源产生的事件的更多相关文章
- JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件
JAVA之旅(三十一)--JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件 有段时间没有更新JAVA了,我们今天来说一下JAVA中的图形化界面,也就是GUI ...
- iOS:使用代理模式监听开关状态改变事件
记一次解决跨控制器监听开关状态改变的尝试. 为了统一设置UITableViewCell里的内容,自定义了UITableViewCell类的一个基类,命名为SettingCell.SettingCell ...
- JS移动端如何监听软键盘回车事件
移动端经常项目中会有搜索之类的功能,一般实现的是按搜索按钮进行搜索,如果要像PC端一样实现按回车键进行搜索该怎么实现呢? 方法很简单,就是在搜索框的input外面套一个form标签 注意点:form ...
- Android如何监听蓝牙耳机的按键事件(转)
源: Android如何监听蓝牙耳机的按键事件 写在前面: 直接想要代码很简单,你直接把滚动条拉到最底端就可以看到.如果想要十分地了解为什么,那就按照我规划的一步一步来理解.以下测试环境以手头上有的「 ...
- el-input监听不了回车事件
vue使用element-ui的el-input监听不了回车事件,原因应该是element-ui自身封装了一层input标签之后,把原来的事件隐藏了,所以如下代码运行是无响应的: <el-inp ...
- 微信浏览器返回刷新,监听微信浏览器返回事件,网页防复制,移动端禁止图片长按和vivo手机点击img标签放大图片
以下代码都经过iphone7,华为MT7 ,谷歌浏览器,微信开发者工具,PC端微信验证.如有bug,还请在评论区留言. demo链接:https://pan.baidu.com/s/1c35mbjM ...
- vue 定义全局函数,监听android返回键事件
vue 定义全局函数,监听android返回键事件 方法一:main.js 注入(1)在main.js中写入函数Vue.prototype.changeData = function (){ aler ...
- js判断是否安装某个android app,没有安装下载该应用(websocket通信,监听窗口失去焦点事件)
现在经常有写场景需要提示用户下载app, 但是如果用户已经安装,我们希望是直接打开app. 实际上,js是没有判断app是否已经安装的方法的,我们只能曲线救国. 首先,我们需要有call起app的sc ...
- vue使用element-ui的el-input监听不了回车事件解决
vue使用element-ui的el-input监听不了回车事件,原因应该是element-ui自身封装了一层input标签之后,把原来的事件隐藏了,所以如下代码运行是无响应的: <el-inp ...
随机推荐
- js中object、字符串与正则表达式的方法
对象 1.object.hasOwnProperty(name) 检测object是否包含一个名为name的属性,那么hasOwnProperty方法返回true,但是不包括其原型上的属性. 正则表达 ...
- 多对多 hibernate映射
数据库: create table EMPLOYEE ( EMPID NUMBER(6) not null, EMPNAME VARCHAR2(32) ) alter table EMPLOYEE a ...
- hadoop mapreduce 计算平均气温的代码,绝对原创
1901 46 1902 21 1903 48 1904 33 1905 43 1906 47 1907 31 1908 28 1909 26 1910 35 1911 30 1912 16 1913 ...
- C++类中的常数据成员和静态数据成员的区别
刚开始学习C++的类和对象的部分,对类中的常数据成员和静态数据成员的概念和用法经常混淆,所以今天整理一下,顺便说一下,今天是我的生日,祝我生日快乐,呵呵. 常数据成员 常数据成员是指在类中定义的不能修 ...
- C++中对象的常引用
直接传递对象名 用对象名做函数参数时,在函数调用时将建立一个新的对象,它是形参对象的拷贝. ================下面给出一个直接传递对象名的例子程序1.1================= ...
- hdu1061
#include <iostream>#include <cstdio>using namespace std;int mod_exp(int a, int b, int c) ...
- Redis常见7种使用场景(PHP)
转发:https://www.jianshu.com/p/2f3add45351b Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并 ...
- ABC118D(DP,完全背包,贪心)
#include<bits/stdc++.h>using namespace std;int cnt[10]={0,2,5,5,4,5,6,3,7,6};int dp[10007];int ...
- 【转】vs发布msi程序详解
源地址:http://wenku.baidu.com/link?url=MV1Mf7IukCZ0cab8AzXQoQ3MAXeUAHGz5b2IuUL4Kw-hCI90ZyBKXwKeQA3t3-SV ...
- 排序工作量之新任务(SHOI2001)
排序工作量之新任务(SHOI2001) 给出两个整数n和t,求n的全排列中逆序对数为t的个数,和逆序对数为t的字典序最小全排列. 首先第一个问题可以用dp解决,\(f[i][j]\)表示前i个数,j个 ...