java事件响应方法汇总(容器类监听、监听器类、AbstractAction、反射)
Java图形用户界面中,处理事件时所必须的步骤是:
1、创建接受响应的组件(控件)
2、实现相关事件监听接口
3、注册事件源的动作监听器
4、事件触发时的事件处理
相应的可以通过以下的集中方式来作出事件响应。
- <span style="font-size: 18px;">一、容器类监听
- 效果:单击窗体中的三个按钮,实现相应的相应时间。
- </span><pre class="java" name="code">import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- //声明 类时,添加“implements ActionListener”实现监听的接口,如果要对多种监听方式进行监听,则用逗号间隔开
- // 比如“implements ActionListener,KeyListener”
- class ButtonListener extends JFrame implements ActionListener{
- JButton ok, cancel,exit; //创建接受响应的组建,就是三个按钮
- public ButtonListener(String title){
- super(title);
- this.setLayout(new FlowLayout());
- ok = new JButton("确定");
- cancel = new JButton("返回");
- exit = new JButton("退出");
- //下面三个语句 为按钮分别 注册监听器
- ok.addActionListener(this);
- cancel.addActionListener(this);
- exit.addActionListener(this);
- getContentPane().add(ok);
- getContentPane().add(cancel);
- getContentPane().add(exit);
- }
- //完成 事件触发时的事件处理
- public void actionPerformed(ActionEvent e){
- if(e.getSource()==ok)
- System.out.println("确定");
- if(e.getSource()==cancel)
- System.out.println("返回");
- if(e.getSource()==exit)
- System.exit(0);;
- }
- public static void main(String args[]) {
- ButtonListener pd=new ButtonListener("ActionEvent Demo");
- pd.setSize(250,100);
- pd.setVisible(true);
- }
- }
- </pre><br>
- <br>
- <pre></pre>
- <p><span style="font-size: 18px;">二、监听类实现</span><br>
- <br>
- <pre style="margin: 4px 0px; font-size: 18px; background-color: rgb(240, 240, 240);" class="java" name="code"><span style="font-size: 18px;">效果:单击窗体中的三个按钮,实现相应的相应时间。
- </span></pre><p></p>
- <div><span style="font-size: 18px;"><br>
- </span></div>
- <pre style="font-size: 18px;" class="html" name="code">import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- class ButtonListener1 extends JFrame { //这里没有实现监听
- JButton ok, cancel,exit;
- public ButtonListener1(String title){
- super(title);
- this.setLayout(new FlowLayout());
- ok = new JButton("确定");
- cancel = new JButton("返回");
- exit = new JButton("退出");
- ok.addActionListener(new MyListener());
- cancel.addActionListener(new MyListener());;
- exit.addActionListener(new MyListener());;
- getContentPane().add(ok);
- getContentPane().add(cancel);
- getContentPane().add(exit);
- }
- public static void main(String args[]) {
- ButtonListener pd=new ButtonListener("ActionEvent Demo");
- pd.setSize(250,100);
- pd.setVisible(true);
- }
- }
- //监听动作事件
- class MyListener implements ActionListener{
- public void actionPerformed(ActionEvent e){
- if(e.getActionCommand()=="确定")
- System.out.println("确定");
- if(e.getActionCommand()=="返回")
- System.out.println("返回");
- if(e.getActionCommand()=="退出")
- System.exit(0);;
- }
- } </pre><br>
- <span style="font-size: 18px;">三、使用 AbstractAction类实现监听</span><br>
- <span style="font-size: 18px;"> 这个方法,我也没搞清,照着别人的例子做出来的<br>
- 效果:单击菜单,作出响应</span><br>
- <pre style="font-size: 18px;" class="java" name="code">import java.awt.BorderLayout;
- import java.awt.event.ActionEvent;
- import javax.swing.AbstractAction;
- import javax.swing.Action;
- import javax.swing.JFrame;
- import javax.swing.JMenu;
- import javax.swing.JMenuBar;
- import javax.swing.JMenuItem;
- import javax.swing.JOptionPane;
- //此类继承AbstractAction,必须实现actionPerformed()方法。
- class AbstractEvent extends AbstractAction{
- //private static final long serialVersionUID = 1L;
- AbstractEvent(){
- }
- public void actionPerformed(ActionEvent e){
- //弹出确认对话框
- if (e.getActionCommand()=="open"){
- JOptionPane.showMessageDialog(null, "打开");
- }else if (e.getActionCommand()=="close"){
- JOptionPane.showMessageDialog(null, "关闭");
- }else if (e.getActionCommand()=="run"){
- JOptionPane.showMessageDialog(null, "运行");
- }else if (e.getActionCommand()=="stop"){
- JOptionPane.showMessageDialog(null, "停止");
- }
- }
- }
- public class TestAbstractEvent {
- private static JMenuBar menubar;
- private static JFrame frame;
- //指定MenuEvent的具体处理程序是AbstractEvent类完成的。
- final Action MenuEvent=new AbstractEvent();
- public TestAbstractEvent(){
- frame=new JFrame("menu");
- frame.getContentPane().setLayout(new BorderLayout());
- menubar=new JMenuBar();
- JMenu menuFile=new JMenu("file");
- //实例化一个菜单项,并添加监听openAction,
- JMenuItem menuItemopen=new JMenuItem("open");
- menuItemopen.addActionListener(MenuEvent);
- JMenuItem menuItemclose=new JMenuItem("close");
- menuItemclose.addActionListener(MenuEvent);
- menuFile.add(menuItemopen);
- menuFile.add(menuItemclose);
- JMenu menuTool=new JMenu("tool");
- JMenuItem menuItemrun=new JMenuItem("run");
- menuItemrun.addActionListener(MenuEvent);
- JMenuItem menuItemstop=new JMenuItem("stop");
- menuItemstop.addActionListener(MenuEvent);
- menuTool.add(menuItemrun);
- menuTool.add(menuItemstop);
- menubar.add(menuFile);
- menubar.add(menuTool);
- menubar.setVisible(true);
- frame.add(menubar,BorderLayout.NORTH);
- frame.setSize(400,200);
- frame.setVisible(true);
- }
- public static void main(String[] args){
- new TestAbstractEvent();
- }
- }</pre><br>
- <span style="font-size: 18px;">四、</span><span style="font-size: 18px;"> AbstractAction类 + 反射 的方法<br>
- <span style="font-size: 18px;">这个方法,我也没搞清,照着别人的例子做出来的!<br>
- </span><br>
- 效果:单击工具栏的三个按钮,通过按钮的名称,反射得到 与按钮名称相同的类实现响应。<br>
- <br>
- </span><pre class="java" name="code">import java.awt.BorderLayout;
- import java.awt.event.ActionEvent;
- import javax.swing.*;
- class ViewAction extends AbstractAction{
- private String ActionName="";
- //private JFrame frame=null;
- private Action action=null;
- public ViewAction(){
- }
- public ViewAction(String ActionName){
- this.ActionName=ActionName;
- //this.frame=frame;
- }
- @Override
- public void actionPerformed(ActionEvent e) {
- Action action=getAction(this.ActionName);
- action.execute();
- }
- private Action getAction(String ActionName){
- try{
- if (this.action==null){
- Action action=(Action)Class.forName(ActionName).newInstance();
- this.action=action;
- }
- return this.action;
- }catch(Exception e){
- return null;
- }
- }
- }
- public class TestAE extends JFrame {
- public JToolBar bar=new JToolBar();
- String buttonName[]={"b1","b2","b3"};
- public TestAE(){
- super("事件");
- for (int i=0;i<buttonName.length;i++){
- ViewAction action=new ViewAction(buttonName[i]);
- JButton button=new JButton(buttonName[i]);
- button.addActionListener(action);
- bar.add(button);
- }
- this.getContentPane().add(bar,BorderLayout.NORTH);
- this.setSize(300, 200);
- this.setLocationRelativeTo(null);
- this.setVisible(true);
- }
- public static void main(String [] args){
- new TestAE();
- }
- }
- interface Action{
- void execute();
- }
- class b1 implements Action{
- public void execute(){
- JOptionPane.showMessageDialog(null, "单击了 b1");
- }
- }
- class b2 implements Action{
- public void execute(){
- JOptionPane.showMessageDialog(null, "单击了 b2");
- }
- }
- class b3 implements Action{
- public void execute(){
- JOptionPane.showMessageDialog(null, "单击了 b3");
- }
- }</pre><br>
- <br>
- <p></p>
java事件响应方法汇总(容器类监听、监听器类、AbstractAction、反射)的更多相关文章
- Android学习之六种事件响应方法汇总
java源码如下: 1.MainActivity.java源码 package com.example.responsetest; import android.app.Activity; impor ...
- java 如何实现文件变动的监听
获取修改时间 long lastTime = file.lastModified(); 原文链接:https://blog.csdn.net/liuyueyi25/article/details/79 ...
- OpenCV3 Java 机器学习使用方法汇总
原文链接:OpenCV3 Java 机器学习使用方法汇总 前言 按道理来说,C++版本的OpenCV训练的版本XML文件,在java中可以无缝使用.但要注意OpenCV本身的版本问题.从2.4 到3 ...
- JAVA进阶之旅(二)——认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践
JAVA进阶之旅(二)--认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践 我们继续聊JAVA,这次比较有意思,那就是反射了 一.认识 ...
- Java面板Panel的使用,监听窗口关闭事件
面板Panel的使用 待解决问题: 1.设计模式:适配器模式 2.frame.setLayout(null); package GUI; import javax.swing.*; import ja ...
- ThinkPHP 数据库操作(六) : 查询事件、事务操作、监听SQL
查询事件 查询事件(V5.0.4+) 从 5.0.4+ 版本开始,增加了数据库的CURD操作事件支持,包括: 查询事件仅支持 find . select . insert . update 和 del ...
- 原生javascript实现类似jquery on方法的行为监听
原生javascript有addEventListener和attachEvent方法来注册事件,但有时候我们需要判断某一行为甚至某一函数是否被执行了,并且能够获取前一行为的参数,这个时候就需要其他方 ...
- java socket 网络通信 指定端口的监听 多线程 乱码
Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首 ...
- Java:基于MD5的文件监听程序
前述和需求说明 和之前写的 Python:基于MD5的文件监听程序 是同样的功能,就不啰嗦了,就是又写了一个java版本的,可以移步 python 版本去看一下,整个的核心思路是一样的.代码已上传Gi ...
随机推荐
- POJ 2923 Relocation
题目大意:有n个物品,有两辆车载重分别是c1,c2.问需要多少趟能把物品运完. (1 ≤ Ci ≤ 100,1 ≤ n ≤ 10,1 ≤ wi ≤ 100). 题解:n小思状压.我们先把所有一次可以拉 ...
- Linux系统编程(33)—— socket编程之TCP程序的错误处理
上一篇的例子不仅功能简单,而且简单到几乎没有什么错误处理,我们知道,系统调用不能保证每次都成功,必须进行出错处理,这样一方面可以保证程序逻辑正常,另一方面可以迅速得到故障信息. 为使错误处理的代码不影 ...
- MFC之按键消息(长按处理)
想要实现长按键的一些控制,查了查可以通过捕获键盘事件,然后处理按键时需要进行的操作.下面简单的实现左右按键界面更新数值加减. 1. 重载PreTranslateMessage(MSG* pMsg)函 ...
- hdu-1800
思路: 这题被坑的不轻. 首先花了一段时间想明白了思路是要找出现次数最多数字,以为这题就这样解决了,结果发现每个数字的最大长度是30,long long都装不下,因此就要用字符串来保存处理.然后在in ...
- Java中静态数据的初始化顺序
Java的类中的数据成员中包含有静态成员(static)时,静态数据成员的初始化顺序是怎样的呢? [程序实例1] import java.util.*; import java.lang.*; imp ...
- BootStrap--模态框中 上传图片
问题:在模态框中添加图片并不会得到你上传图片的名称,无法存到数据 下面介绍两个方法,都是可以得到图片名称的. 第一种 前面如何加载模态框就不写了,上篇有写,这里只是为得到图片写的 //需要添加一个 ...
- (转)在SAE使用Apple Push Notification Service服务开发iOS应用, 实现消息推送
在SAE使用Apple Push Notification Service服务开发iOS应用, 实现消息推送 From: http://saeapns.sinaapp.com/doc.html 1,在 ...
- 探究css !important的应用之道
定义及语法: !important是CSS1就定义的语法,作用是提高指定样式规则的应用优先权. 语法格式:{ cssRule !important },即将!important写在定义的最后面, 例如 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- Mapreduce运行过程分析(基于Hadoop2.4)——(一)
1 概述 该瞅瞅MapReduce的内部执行原理了,曾经仅仅知道个皮毛,再不搞搞,不然怎么死的都不晓得.下文会以2.4版本号中的WordCount这个经典样例作为分析的切入点.一步步来看里面究竟是个什 ...