`
lzy719
  • 浏览: 5579 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类

关于java中对事件监听的理解

阅读更多
在Java开发中,对于事件的处理非常重要,比如响应键盘的输入、鼠标的点击、窗口的移动等等都要涉及到Java事件的应用。
Java事件由事件类和监听接口组成,自定义一个事件前,必须提供一个事件的监听接口以及一个事件类。JAVA中监听接口是继承EventListener的类,事件类继承EventObject的类。很多基本的事件系统已经为我们定义好了,我们只要学会调用即可,但是为了更加灵活地满足特定的需求,我们有时候也需要自定义事件。

对常用的事件监听器是:MouseListener,ActionListener,MouseMotionListener
1、MouseListener接口中,存在mouseClicked、mousePressed、mouseReleased、 mouseEntered、mouseExited这五个方法,分别对应鼠标的点击,按下,释放,进入组件和离开组件。

2、ActionListener接口中,只有actionPerformed方法,用来获取被监听组件的状态,例如用e.getActionCommand()获取按钮上的文字。

3、MouseMotionListener接口中则存在mouseDragged和mouseMove两个方法,分别用于监听鼠标的拖动与移动。




import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Calculator {
public void initCalculator(){
JFrame jf = new JFrame();
jf.setDefaultCloseOperation(3);
jf.setSize(315, 350);
BorderLayout b = new BorderLayout();
jf.setLayout(b);
//设置北面面板相关内容
JPanel northpanel = new JPanel();
northpanel.setPreferredSize(new Dimension(0, 30));
jf.add(northpanel, BorderLayout.NORTH);
northpanel.setLayout(null);

//设置南面面板相关内容
JPanel southpanel = new JPanel();
southpanel.setPreferredSize(new Dimension(0, 240));
jf.add(southpanel, BorderLayout.SOUTH);
southpanel.setLayout(null);
javax.swing.JButton btn4 = new JButton("MC");
btn4.setBounds(0, 0, 55, 35);
southpanel.add(btn4);
javax.swing.JButton btn5 = new JButton("MR");
btn5.setBounds(60, 0, 55, 35);
southpanel.add(btn5);
javax.swing.JButton btn6 = new JButton("MS");
btn6.setBounds(120, 0, 55, 35);
southpanel.add(btn6);
javax.swing.JButton btn7 = new JButton("M+");
btn7.setBounds(180, 0, 55, 35);
southpanel.add(btn7);
javax.swing.JButton btn8 = new JButton("M-");
btn8.setBounds(240, 0, 55, 35);
southpanel.add(btn8);
javax.swing.JButton btn9 = new JButton("@");
btn9.setBounds(0, 40, 55, 35);
southpanel.add(btn9);
javax.swing.JButton btn10 = new JButton("CE");
btn10.setBounds(60, 40, 55, 35);
southpanel.add(btn10);
javax.swing.JButton btn11 = new JButton("C");
btn11.setBounds(120, 40, 55, 35);
southpanel.add(btn11);
javax.swing.JButton btn12 = new JButton("+_");
btn12.setBounds(180, 40, 55, 35);
southpanel.add(btn12);
javax.swing.JButton btn13 = new JButton("#");
btn13.setBounds(240, 40, 55, 35);
southpanel.add(btn13);
javax.swing.JButton btn14 = new JButton("7");
btn14.setBounds(0, 80, 55, 35);
southpanel.add(btn14);
javax.swing.JButton btn15 = new JButton("8");
btn15.setBounds(60, 80, 55, 35);
southpanel.add(btn15);
javax.swing.JButton btn16 = new JButton("9");
btn16.setBounds(120, 80, 55, 35);
southpanel.add(btn16);
javax.swing.JButton btn17 = new JButton("/");
btn17.setBounds(180, 80, 55, 35);
southpanel.add(btn17);
javax.swing.JButton btn18 = new JButton("%");
btn18.setBounds(240, 80, 55, 35);
southpanel.add(btn18);
javax.swing.JButton btn19 = new JButton("4");
btn19.setBounds(0, 120, 55, 35);
southpanel.add(btn19);
javax.swing.JButton btn20 = new JButton("5");
btn20.setBounds(60, 120, 55, 35);
southpanel.add(btn20);
javax.swing.JButton btn21 = new JButton("6");
btn21.setBounds(120, 120, 55, 35);
southpanel.add(btn21);
javax.swing.JButton btn22 = new JButton("*");
btn22.setBounds(180, 120, 55, 35);
southpanel.add(btn22);
javax.swing.JButton btn23 = new JButton("1/x");
btn23.setBounds(240, 120, 55, 35);
southpanel.add(btn23);
javax.swing.JButton btn24 = new JButton("1");
btn24.setBounds(0, 160, 55, 35);
southpanel.add(btn24);
javax.swing.JButton btn25 = new JButton("2");
btn25.setBounds(60, 160, 55, 35);
southpanel.add(btn25);
javax.swing.JButton btn26 = new JButton("3");
btn26.setBounds(120, 160, 55, 35);
southpanel.add(btn26);
javax.swing.JButton btn27 = new JButton("-");
btn27.setBounds(180, 160, 55, 35);
southpanel.add(btn27);
javax.swing.JButton btn28 = new JButton("=");
btn28.setBounds(240, 160, 55, 75);
southpanel.add(btn28);
javax.swing.JButton btn29 = new JButton("0");
btn29.setBounds(0, 200, 115, 35);
southpanel.add(btn29);
javax.swing.JButton btn30 = new JButton(".");
btn30.setBounds(120, 200, 55, 35);
southpanel.add(btn30);
javax.swing.JButton btn31 = new JButton("+");
btn31.setBounds(180, 200, 55, 35);
southpanel.add(btn31);

//设置中心面板相关内容
JPanel centerpanel = new JPanel();
centerpanel.setBackground(Color.lightGray);
jf.add(centerpanel, BorderLayout.CENTER);
centerpanel.setLayout(new BorderLayout());
JTextField input = new JTextField(20);
centerpanel.add(input);

//将0-9十个数字对应的按钮放入事件监听器中
MyActionListener2 l = new MyActionListener2(input);
btn14.addActionListener(l);
btn15.addActionListener(l);
btn16.addActionListener(l);
btn19.addActionListener(l);
btn20.addActionListener(l);
btn21.addActionListener(l);
btn24.addActionListener(l);
btn25.addActionListener(l);
btn26.addActionListener(l);
btn29.addActionListener(l);
btn28.addActionListener(l);
btn27.addActionListener(l);
btn30.addActionListener(l);
btn31.addActionListener(l);
btn22.addActionListener(l);
btn17.addActionListener(l);
jf.setVisible(true);
}
public static void main(String[] args) {
Calculator c = new Calculator();
c.initCalculator();
}
}




import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JTextField;

public class MyActionListener2 implements ActionListener {
    private JTextField input;
    private String s1;
    private String s2;
    private String oper;
    public MyActionListener2(JTextField input){
    this.input = input;
    }
    public void actionPerformed(ActionEvent e){
    String cmd = e.getActionCommand();
    System.out.println("cmd="+cmd);
    String str = input.getText();
    if(cmd.equals("+")||cmd.equals("-") || cmd.equals("*") || cmd.equals("/")){
    //运算处理
    s1 = input.getText();
    oper = cmd;
    input.setText("");
   
    }else if (cmd.equals("=")){
    //计算结果
    s2 = input.getText();
    double d1 = Double.parseDouble(s1);
    double d2 = Double.parseDouble(s2);
    double d = 0;
    if(oper.equals("+")){
    d = d1 + d2;
    }else if(oper.equals("-")){
    d = d1 - d2;
    }else if(oper.equals("*")){
    d = d1 * d2;
    }else if(oper.equals("/")){
    d = d1 / d2;
    }
    input.setText(""+d);
    }else{
    input.setText(str+cmd);
         }
     }
}
分享到:
评论
1 楼 ayaome 2014-11-18  
 

相关推荐

    java中接口和事件监听器的深入理解

    主要给大家介绍了关于java中接口和事件监听器的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    深入探索Spring事件监听机制:技术与应用

    Spring框架作为Java开发的核心,其事件监听机制是理解和利用Spring的关键要素之一。这种机制基于观察者模式,由事件(ApplicationEvent)、事件监听器(ApplicationListener)和事件广播器...

    计算机毕业设计:Java实现的局域网监听软件(源码+论文),保证可靠运行,附赠计算机答辩PPT模板

    在源码方面,该软件采用Java编程语言实现,充分利用了Java在网络编程方面的优势,实现了对局域网内数据包的高效监听和分析。源码结构清晰,逻辑严谨,易于理解和维护,为学习者提供了宝贵的实践机会。通过研读源码,...

    Java实现的局域网监听软件(源代码+论文),可用作毕业设计,课程设计

    此资源集包含了一套完整的Java实现的局域网监听软件项目源代码、相关的毕业论文以及详尽的使用说明。它旨在提供一个全面、深入的学习和研究工具,适用于本科课程设计、毕业设计以及任何希望深入学习Java编程的学习者...

    java源码包---java 源码 大量 实例

    通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...

    java 核心编程 java

    下面是本卷详细介绍的主要内容: Java语言基础知识面向对象程序设计接口与内部类事件监听器模型 Swing图形用户界面程序设计打包应用程序异常处理登陆与调试泛型化程序设计集合框架多线程... 【作译者介绍】 本书提供...

    java监听者模式三个实例

    三个有关监听者的实例,一定要理解透哦。 如果工作两年,还没开始学设计模式,说明你out了哦

    Java核心技术 第12版 开发基础+高级特性 英文原版

    着力让读者在充分理解Java语言和Java类库的基础上,灵活应用Java提供的高级特性,具体包括面向对象程序设计、反射与代理、接口与内部类、异常处理、泛型程序设计、集合框架、事件监听器模型、图形用户界面设计和并发...

    java源码包2

    通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...

    JAVA上百实例源码以及开源项目

    通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...

    JAVA上百实例源码以及开源项目源代码

    通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...

    java源码包4

    通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...

    java源码包3

    通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...

    JAVA简易计算器.rar

    (3) 理解Java的事件处理机制和委托事件模型,理解事件源、监听者等概念 题目一:实验内容及要求 设计一个简易计算器。在“操作数”标签右侧的两个文本框中输入操作数,当单击操作符+、-、*、÷按钮时,对两个...

    JAVA本地监听与远程端口扫描(源代码+论文).zip

    项目名称:《JAVA本地监听与远程端口扫描(源代码+论文)》 内容概要: 本项目是一个综合性的Java网络工具项目,它由两个核心功能组成:本地监听和远程端口扫描。本地监听功能允许用户实时监控本地网络接口上的流量...

    Java线程池文档

    [1]中博主自己通过ThreadGroup实现一个线程池(挺方便理解的),使用的是jdk1.4版本,Jdk1.5版本以上提供了现成的线程池。 [2]中介绍了java.util.concurrent.Executors类的API。 [3]中介绍了Java中线程池的类体系...

    java简单计算器开发GUI图形化界面设计与实现(项目源码+课程设计报告)

    (1) 巩固和加深学生对 Java 语言课程的基本知识的理解和掌握; (2) 掌握 Java 语言编程和程序调试的基本技能; (3) 利用 Java 语言进行基本的程序设计; (4) 掌握书写程序设计说明文档的能力; (5) 提高运用 ...

    java核心技术

    囊括了Java平, 台标准版(Java SE/J2SE)的全部基础知识,提供了大量完整且具有实际意, 义的应用实例,详细介绍了Java语言基础知识、面向对象程序设计、接口, 与内部类、事件监听器模型、swing图形用户界面程序设计、...

    Java实现的贪吃蛇游戏代码

    理解事件处理机制:代码中包含了键盘事件的处理,大家可以学习如何监听和响应用户的输入。 实践游戏开发:贪吃蛇游戏是一个经典的游戏,通过实现它可以了解游戏开发的基本流程和技巧。 拓展和定制:大家可以根据...

    oracle变化数据捕获

    oracle变化数据捕获,学习和理解如何在ORACLE数据库跟踪数据变化的教程

Global site tag (gtag.js) - Google Analytics