Java图形用户界面中,处理事件时所必须的步骤是:

1、创建接受响应的组件(控件)
2、实现相关事件监听接口
3、注册事件源的动作监听器
4、事件触发时的事件处理

相应的可以通过以下的集中方式来作出事件响应。

  1. <span style="font-size: 18px;">一、容器类监听
  2. 效果:单击窗体中的三个按钮,实现相应的相应时间。
  3. </span><pre class="java" name="code">import java.awt.*;
  4. import java.awt.event.*;
  5. import javax.swing.*;
  6. //声明 类时,添加“implements ActionListener”实现监听的接口,如果要对多种监听方式进行监听,则用逗号间隔开
  7. // 比如“implements ActionListener,KeyListener”
  8. class  ButtonListener extends JFrame implements ActionListener{
  9. JButton ok, cancel,exit;  //创建接受响应的组建,就是三个按钮
  10. public  ButtonListener(String title){
  11. super(title);
  12. this.setLayout(new FlowLayout());
  13. ok = new JButton("确定");
  14. cancel = new JButton("返回");
  15. exit = new JButton("退出");
  16. //下面三个语句 为按钮分别  注册监听器
  17. ok.addActionListener(this);
  18. cancel.addActionListener(this);
  19. exit.addActionListener(this);
  20. getContentPane().add(ok);
  21. getContentPane().add(cancel);
  22. getContentPane().add(exit);
  23. }
  24. //完成 事件触发时的事件处理
  25. public void  actionPerformed(ActionEvent e){
  26. if(e.getSource()==ok)
  27. System.out.println("确定");
  28. if(e.getSource()==cancel)
  29. System.out.println("返回");
  30. if(e.getSource()==exit)
  31. System.exit(0);;
  32. }
  33. public static void main(String args[]) {
  34. ButtonListener pd=new ButtonListener("ActionEvent Demo");
  35. pd.setSize(250,100);
  36. pd.setVisible(true);
  37. }
  38. }
  39. </pre><br>
  40. <br>
  41. <pre></pre>
  42. <p><span style="font-size: 18px;">二、监听类实现</span><br>
  43. <br>
  44. <pre style="margin: 4px 0px; font-size: 18px; background-color: rgb(240, 240, 240);" class="java" name="code"><span style="font-size: 18px;">效果:单击窗体中的三个按钮,实现相应的相应时间。
  45. </span></pre><p></p>
  46. <div><span style="font-size: 18px;"><br>
  47. </span></div>
  48. <pre style="font-size: 18px;" class="html" name="code">import java.awt.*;
  49. import java.awt.event.*;
  50. import javax.swing.*;
  51. class  ButtonListener1 extends JFrame {  //这里没有实现监听
  52. JButton ok, cancel,exit;
  53. public  ButtonListener1(String  title){
  54. super(title);
  55. this.setLayout(new FlowLayout());
  56. ok = new JButton("确定");
  57. cancel = new JButton("返回");
  58. exit = new JButton("退出");
  59. ok.addActionListener(new MyListener());
  60. cancel.addActionListener(new MyListener());;
  61. exit.addActionListener(new MyListener());;
  62. getContentPane().add(ok);
  63. getContentPane().add(cancel);
  64. getContentPane().add(exit);
  65. }
  66. public static void main(String args[]) {
  67. ButtonListener pd=new ButtonListener("ActionEvent Demo");
  68. pd.setSize(250,100);
  69. pd.setVisible(true);
  70. }
  71. }
  72. //监听动作事件
  73. class  MyListener implements ActionListener{
  74. public void  actionPerformed(ActionEvent e){
  75. if(e.getActionCommand()=="确定")
  76. System.out.println("确定");
  77. if(e.getActionCommand()=="返回")
  78. System.out.println("返回");
  79. if(e.getActionCommand()=="退出")
  80. System.exit(0);;
  81. }
  82. } </pre><br>
  83. <span style="font-size: 18px;">三、使用 AbstractAction类实现监听</span><br>
  84. <span style="font-size: 18px;">    这个方法,我也没搞清,照着别人的例子做出来的<br>
  85. 效果:单击菜单,作出响应</span><br>
  86. <pre style="font-size: 18px;" class="java" name="code">import java.awt.BorderLayout;
  87. import java.awt.event.ActionEvent;
  88. import javax.swing.AbstractAction;
  89. import javax.swing.Action;
  90. import javax.swing.JFrame;
  91. import javax.swing.JMenu;
  92. import javax.swing.JMenuBar;
  93. import javax.swing.JMenuItem;
  94. import javax.swing.JOptionPane;
  95. //此类继承AbstractAction,必须实现actionPerformed()方法。
  96. class AbstractEvent extends AbstractAction{
  97. //private static final long serialVersionUID = 1L;
  98. AbstractEvent(){
  99. }
  100. public void actionPerformed(ActionEvent e){
  101. //弹出确认对话框
  102. if (e.getActionCommand()=="open"){
  103. JOptionPane.showMessageDialog(null, "打开");
  104. }else if (e.getActionCommand()=="close"){
  105. JOptionPane.showMessageDialog(null, "关闭");
  106. }else if (e.getActionCommand()=="run"){
  107. JOptionPane.showMessageDialog(null, "运行");
  108. }else if (e.getActionCommand()=="stop"){
  109. JOptionPane.showMessageDialog(null, "停止");
  110. }
  111. }
  112. }
  113. public class TestAbstractEvent {
  114. private static JMenuBar menubar;
  115. private static JFrame frame;
  116. //指定MenuEvent的具体处理程序是AbstractEvent类完成的。
  117. final Action MenuEvent=new AbstractEvent();
  118. public TestAbstractEvent(){
  119. frame=new JFrame("menu");
  120. frame.getContentPane().setLayout(new BorderLayout());
  121. menubar=new JMenuBar();
  122. JMenu menuFile=new JMenu("file");
  123. //实例化一个菜单项,并添加监听openAction,
  124. JMenuItem menuItemopen=new JMenuItem("open");
  125. menuItemopen.addActionListener(MenuEvent);
  126. JMenuItem menuItemclose=new JMenuItem("close");
  127. menuItemclose.addActionListener(MenuEvent);
  128. menuFile.add(menuItemopen);
  129. menuFile.add(menuItemclose);
  130. JMenu menuTool=new JMenu("tool");
  131. JMenuItem menuItemrun=new JMenuItem("run");
  132. menuItemrun.addActionListener(MenuEvent);
  133. JMenuItem menuItemstop=new JMenuItem("stop");
  134. menuItemstop.addActionListener(MenuEvent);
  135. menuTool.add(menuItemrun);
  136. menuTool.add(menuItemstop);
  137. menubar.add(menuFile);
  138. menubar.add(menuTool);
  139. menubar.setVisible(true);
  140. frame.add(menubar,BorderLayout.NORTH);
  141. frame.setSize(400,200);
  142. frame.setVisible(true);
  143. }
  144. public static void main(String[] args){
  145. new TestAbstractEvent();
  146. }
  147. }</pre><br>
  148. <span style="font-size: 18px;">四、</span><span style="font-size: 18px;"> AbstractAction类 + 反射 的方法<br>
  149. <span style="font-size: 18px;">这个方法,我也没搞清,照着别人的例子做出来的!<br>
  150. </span><br>
  151. 效果:单击工具栏的三个按钮,通过按钮的名称,反射得到 与按钮名称相同的类实现响应。<br>
  152. <br>
  153. </span><pre class="java" name="code">import java.awt.BorderLayout;
  154. import java.awt.event.ActionEvent;
  155. import javax.swing.*;
  156. class ViewAction extends AbstractAction{
  157. private String ActionName="";
  158. //private JFrame frame=null;
  159. private Action action=null;
  160. public ViewAction(){
  161. }
  162. public ViewAction(String ActionName){
  163. this.ActionName=ActionName;
  164. //this.frame=frame;
  165. }
  166. @Override
  167. public void actionPerformed(ActionEvent e) {
  168. Action action=getAction(this.ActionName);
  169. action.execute();
  170. }
  171. private Action getAction(String ActionName){
  172. try{
  173. if (this.action==null){
  174. Action action=(Action)Class.forName(ActionName).newInstance();
  175. this.action=action;
  176. }
  177. return this.action;
  178. }catch(Exception e){
  179. return null;
  180. }
  181. }
  182. }
  183. public class TestAE extends JFrame {
  184. public JToolBar bar=new JToolBar();
  185. String buttonName[]={"b1","b2","b3"};
  186. public TestAE(){
  187. super("事件");
  188. for (int i=0;i<buttonName.length;i++){
  189. ViewAction action=new ViewAction(buttonName[i]);
  190. JButton button=new JButton(buttonName[i]);
  191. button.addActionListener(action);
  192. bar.add(button);
  193. }
  194. this.getContentPane().add(bar,BorderLayout.NORTH);
  195. this.setSize(300, 200);
  196. this.setLocationRelativeTo(null);
  197. this.setVisible(true);
  198. }
  199. public static void main(String [] args){
  200. new TestAE();
  201. }
  202. }
  203. interface Action{
  204. void execute();
  205. }
  206. class b1 implements Action{
  207. public void execute(){
  208. JOptionPane.showMessageDialog(null, "单击了 b1");
  209. }
  210. }
  211. class b2 implements Action{
  212. public void execute(){
  213. JOptionPane.showMessageDialog(null, "单击了 b2");
  214. }
  215. }
  216. class b3 implements Action{
  217. public void execute(){
  218. JOptionPane.showMessageDialog(null, "单击了 b3");
  219. }
  220. }</pre><br>
  221. <br>
  222. <p></p>

java事件响应方法汇总(容器类监听、监听器类、AbstractAction、反射)的更多相关文章

  1. Android学习之六种事件响应方法汇总

    java源码如下: 1.MainActivity.java源码 package com.example.responsetest; import android.app.Activity; impor ...

  2. java 如何实现文件变动的监听

    获取修改时间 long lastTime = file.lastModified(); 原文链接:https://blog.csdn.net/liuyueyi25/article/details/79 ...

  3. OpenCV3 Java 机器学习使用方法汇总

    原文链接:OpenCV3 Java 机器学习使用方法汇总  前言 按道理来说,C++版本的OpenCV训练的版本XML文件,在java中可以无缝使用.但要注意OpenCV本身的版本问题.从2.4 到3 ...

  4. JAVA进阶之旅(二)——认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践

    JAVA进阶之旅(二)--认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践 我们继续聊JAVA,这次比较有意思,那就是反射了 一.认识 ...

  5. Java面板Panel的使用,监听窗口关闭事件

    面板Panel的使用 待解决问题: 1.设计模式:适配器模式 2.frame.setLayout(null); package GUI; import javax.swing.*; import ja ...

  6. ThinkPHP 数据库操作(六) : 查询事件、事务操作、监听SQL

    查询事件 查询事件(V5.0.4+) 从 5.0.4+ 版本开始,增加了数据库的CURD操作事件支持,包括: 查询事件仅支持 find . select . insert . update 和 del ...

  7. 原生javascript实现类似jquery on方法的行为监听

    原生javascript有addEventListener和attachEvent方法来注册事件,但有时候我们需要判断某一行为甚至某一函数是否被执行了,并且能够获取前一行为的参数,这个时候就需要其他方 ...

  8. java socket 网络通信 指定端口的监听 多线程 乱码

    Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首 ...

  9. Java:基于MD5的文件监听程序

    前述和需求说明 和之前写的 Python:基于MD5的文件监听程序 是同样的功能,就不啰嗦了,就是又写了一个java版本的,可以移步 python 版本去看一下,整个的核心思路是一样的.代码已上传Gi ...

随机推荐

  1. HDOJ(HDU) 1407 测试你是否和LTC水平一样高(暴力)

    Problem Description 大家提到LTC都佩服的不行,不过,如果竞赛只有这一个题目,我敢保证你和他绝对在一个水平线上! 你的任务是: 计算方程x^2+y^2+z^2= num的一个正整数 ...

  2. [LeetCode] 21. Merge Two Sorted Lists 解题思路

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...

  3. spring aop实现原理

    通过两种代理方式,一是JDK本身的代理方式,二是CGLIB提供的代理方式,在代理类的前面加事务begin,在后面加事务commit,需要的数据库连接从ThreadLocal中取

  4. Python爬虫实战(二)

    本来晚上是准备写贴吧爬虫的,但是在分析页面时就遇到了大麻烦!选取了某个帖子,在爬取的时候,发现正则匹配不全..很尴尬!!先来看看吧, #!/usr/bin/env python # -*- codin ...

  5. CodeForces 242E - XOR on Segment 二维线段树?

    今天练习赛的题....又是线段树的变换..拿到题我就敲了个点更新区间查询的..果断超时...然后想到了可以将每个数与合表示成不进位的二进制数..这样就可以区间进行更新了..比赛的时候写搓了..刚重写了 ...

  6. swift 实现漂亮的粒子效果CAEmitterLayer

    一些粒子效果 我们经常会在一些游戏或者应用中看到一些炫酷的粒子效果,我们在iOS中也能很轻松的搞一些粒子效果 我们本次做得是一个下雪的效果,看下效果图 源码地址: https://github.com ...

  7. 怎么设置tomcat管理员的用户名和密码

    我们常常要进入Tomcat的管理界面来进行相应的操作,我们首先得有一个管理员的账户和密码.而Tomcat默认是没有管理员账户的,那么我们该怎么来添加一个管理员账户呢? 如果我们输入错误的Tomcat管 ...

  8. Hibernate项目里配置环境时,jar包配置不当会对测试结果产生影响。

    问题情况: 如下图所示,该图中,显示了一堆错误的jar包.这是导致了Junit4测试通过了,数据库却没反应的原因. 原因: 之所以出现这种情况,eclipse其实已经告诉了我们原因.如下图所示,这些j ...

  9. 通过 yum update 将系统从CentOS 6.2 升级到 CentOS 6.6 及升级过程中的简单排错

    本文说明 本文写于2014年的WP中,后WP停止维护,今天翻到此记录整理下,记录于此,方便日后查看. 话说那时候写博客真是认真啊~哈哈~ 升级前的系统信息 [root@thatsit ~]# unam ...

  10. 在Java中兼容Windows和Linux的路径处理

    Linux中的路径使用'/',而Windows下正好相反'\',Java提供了以系统属性的方式获取路径分隔符: System.getProperty("file.separator" ...