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 ...
随机推荐
- JDBC操作MySQL(crud)
这两天复习了一下JDBC操作MySQL,把crud操作的例子记一下, 类库链接(mysql-connector-java-5.1.37-bin.jar):http://files.cnblogs.co ...
- 在命令行上启动genymotion虚拟机
自从有了genymotion,多机联调就解放了,一台电脑运行两个genymotion虚拟机毫无压力,不过也看用的是哪种os image,之前我以为google自己的Nexus应该最适应,哪知道开起来比 ...
- Umbraco Examine Search (Lucene.net) french accent
在项目中使用Umbraco examine search 来search 法语网站时,客户有一个需求,就是 当search expérience 和 experience 时,需要返回一样的结果. ...
- c#入门学习-Action和Func的使用
我的理解就是:Action和Func就是官方声明好的代理using System; namespace funcActionDemo{ class MainClass { p ...
- 一个web.Config或app.Config自定义段configSections的示例--转
直接用配置文件app.Config或web.Config配置应用系统的运行参数,比自己做一个xml配置文件,简洁方便得多.这两个配置文件不仅有常见的connectionStrings和appSetti ...
- JDK1.8源码(十一)——java.util.TreeMap类
在前面几篇博客分别介绍了这样几种集合,基于数组实现的ArrayList 类,基于链表实现的LinkedList 类,基于散列表实现的HashMap 类,本篇博客我们来介绍另一种数据类型,基于树实现的T ...
- pyMongo 一些基本操作
1. find() 函数, 可以在函数体内直接指定 filter, sort, projection(限制field), 语法如下: datas = col.find( filter = {" ...
- Hadoop集群配置免密SSH登录方法
Hadoop集群包含1个主节点和3个从节点,需要实现各节点之间的免密码登录,下面介绍具体的实现方法. 一.Hadoop集群环境 二.免密登录原理 每台主机authorized_keys文件里面包含的主 ...
- 我的省选 Day -11
Day -11 上了一天的文化课,晚上才来到机房(神秘的一天.. 班里前一半的JuLao们都去参加省质检的同步赛了, 然而我太菜,早就跌到班级的中下下了(所以没得参加.. 所以今天上课时特别尴尬,班级 ...
- html_entity_decode与htmlentities函数
htmlentities() 函数把字符转换为 HTML 实体.html_entity_decode() 函数把 HTML 实体转换为字符.例子:$a = '<div> <p> ...