在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);
}
}
}
分享到:
相关推荐
首先,我们需要理解Java AWT(Abstract Window Toolkit)和Swing库中的基础事件监听机制。这两个库提供了许多内置的事件类和监听器接口,如ActionListener用于处理按钮点击,MouseListener和MouseMotionListener用于...
监听器模式是Java设计模式中的一种行为型模式,主要用于监听某些事件的发生,并在事件发生时自动执行预定义的操作。在实际开发中,监听器模式可以用于多种场景,如UI事件处理、事件广播、异步通知等。 在监听器模式...
在Java编程中,监听器...在提供的压缩包文件“05_监听器”中,可能包含更多关于Java监听器的实例代码和讲解,可以帮助深入理解这一主题。建议查看这些文件,动手实践并调试代码,以便更好地掌握Java监听器的使用。
在Java编程中,事件处理是GUI(图形用户界面)编程中的关键部分,它涉及到用户与应用程序的交互。事件监听和分发机制使得程序能够响应用户的操作,如点击按钮、选择菜单项等。以下是对这个主题的详细解释: 1. **...
开发过程中,可能需要查看和修改Windchill的源代码,以便更好地理解和定制事件监听功能。 工具方面,Windchill提供了一套完整的开发环境,如Windchill ProjectLink和Windchill Workgroup Manager,它们支持事件监听...
#### 二、Java监听器 监听器是实现特定接口的类,用于接收并响应来自事件源的事件。监听器通常需要实现特定接口中定义的方法,这些方法会在相应的事件发生时被调用。例如,对于按钮点击事件,监听器需要实现`...
【JAVA USB监听器】是一种基于Java编程语言实现的软件工具,其主要功能是对USB设备进行实时监控,当USB设备插入时,能够自动检测并复制指定类型的文件到预先设定的目录中。这种工具对于需要频繁从USB设备中获取特定...
在Java编程中,图片绘制和鼠标事件监听是两个重要的概念,尤其对于开发用户界面和交互式应用程序至关重要。本文将深入探讨这两个主题,并结合一个名为"Plane"的示例,帮助初学者理解如何在Java中实现这些功能。 ...
在Java编程语言中,事件处理是用户界面(UI)应用程序的核心部分,允许程序对用户的交互做出响应。在本篇中,我们将深入探讨如何使用`KeyListener`接口来监听键盘事件,以便在用户按下、释放或键入特定键时执行相应...
虽然Java标准库没有提供数据库级别的监听,但在JDBC 4.0及以上版本引入了`ConnectionEventListener`、`StatementEventListener`等接口,可以在连接或语句生命周期中捕获某些事件,但它们无法直接监听数据变化。...
本资源“java+多线程+界面编程+事件监听+坦克大战源码整理”是一个综合性的学习资料,旨在帮助开发者深入理解并实践这些核心概念。下面将对这些知识点进行详细的阐述。 1. **Java多线程**: Java多线程允许程序...
Java Event Bus 事件监听器的应用 在Java编程中,事件驱动模型是一种常见的设计模式,它使得组件之间可以相互通信而无需直接耦合。Event Bus(事件总线)是这种模式的一种实现,常用于Android和Java桌面应用。本文...
2. **事件监听**: 在Java GUI编程中,事件监听是一种机制,用于跟踪用户的交互行为。例如,当用户点击按钮时,会触发一个按钮点击事件。通过添加事件监听器,我们可以定义事件发生时执行的代码块。在这个打字软件中...
在Java编程语言中,"监听方法"是一种关键的机制,主要用于事件驱动编程。这个概念主要应用于用户界面(UI)开发,如Swing或JavaFX,但也适用于其他领域,如网络通信或多线程同步。本篇文章将深入探讨Java中的监听...
### Java监听器基础知识与实践 #### 一、Java监听器概念 在Java中,监听器是一种用于处理事件的机制。当某个特定类型的事件发生时,监听器会执行相应的操作。这种机制广泛应用于图形用户界面(GUI)编程中,使得...
#### 三、本例中的Java监听器实践 在这个示例中,我们通过创建一个简单的Swing程序来演示如何使用Java监听器处理按钮点击事件。 #### 四、代码分析 1. **定义监听器类**:该程序定义了一个名为`AnonyTest`的类,...
这个项目不仅是一个有趣的学习实践,而且能够帮助初学者理解Java GUI编程、键盘事件监听、多线程以及文件I/O等核心概念。 首先,让我们从Java Swing开始。Swing是Java的一个图形用户界面(GUI)工具包,它是Java ...
本文将深入探讨事件处理监听器的概念,以及如何在Java或类似的面向对象语言中设置和使用它们。 首先,我们来理解“事件”这个概念。在UI编程中,事件是用户与界面元素交互的结果。例如,当用户点击一个按钮时,就会...
### Java常用事件及对应的监听器和方法 在Java中,事件处理机制是Swing图形用户界面框架的一个核心组成部分。本文将详细介绍Java中常用的事件类型、...希望本文能够帮助初学者更好地理解和应用Java中的事件处理机制。