`

Java事件初步

阅读更多
GUI程序发展到现在,事件一直是其核心。
从以前的Win32程序,处理事件需要编写代码来检查事件队列,代码由switch来控制,这种方式编写的程序可读性很差。
后来的Visual Basic,.NET,将事件对程序员隐藏起来。

那么,我们Java中是如何处理事件的呢?
Java对事件控制作了综合,实现了从事件源到事件监听器的传递。

事件源注册事件监听器对象,如下:
eventSourceObject.addEventListener(eventListenerObject);


eg:
ActionListener listener = ...;
JButton button = new JButton("Ok");
button.addActionListener(listener);


下面我们来举个例子,我们做个Frame,在上面放个面板(Panel),在Panel上再放个
button,点击button,弹出对话框。
这是一个非常简单的例子。

方法一: 我们可以把事件监听器做成是Panel的私有内部类
package corejava2.event;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SimpleButton1 {
	public static void main(String[] args) {
		SimpleFrame1 frame = new SimpleFrame1();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}

/**
 * A frame with a button panel
 */
class SimpleFrame1 extends JFrame {
	public static final int DEFAULT_WIDTH = 300;
	public static final int DEFAULT_HEIGHT = 200;
	
	public SimpleFrame1() {
		setTitle("Simple Button Test");
		setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
		
		//add panel to frame
		SimplePanel1 panel = new SimplePanel1();
		add(panel);
	}
}

/**
 * A panel with one simple
 */
class SimplePanel1 extends JPanel {
	public SimplePanel1() {
		JButton simpleButton = new JButton("Simple Button");
		add(simpleButton);
		
		ButtonAction buttonAction = new ButtonAction();
		simpleButton.addActionListener(buttonAction);
	}

	/**
	 * An action listener which is an inner class
	 */
	private class ButtonAction implements ActionListener {
		public void actionPerformed(ActionEvent event) {
			JOptionPane.showMessageDialog(null, "You clicked the button!");
		}
	}
}



方法二:我们也可以把事件监听器做成是匿名类
package corejava2.event;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SimpleButton2 {
	public static void main(String[] args) {
		SimpleFrame2 frame = new SimpleFrame2();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}

/**
 * A frame with a button panel
 */
class SimpleFrame2 extends JFrame {
	public static final int DEFAULT_WIDTH = 300;
	public static final int DEFAULT_HEIGHT = 200;
	
	public SimpleFrame2() {
		setTitle("Simple Button Test");
		setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
		
		//add panel to frame
		SimplePanel2 panel = new SimplePanel2();
		add(panel);
	}
}

/**
 * A panel with one simple
 */
class SimplePanel2 extends JPanel {
	public SimplePanel2() {
		JButton simpleButton = new JButton("Simple Button");
		add(simpleButton);
		
		simpleButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				JOptionPane.showMessageDialog(null, "You clicked the button!");
			}
		});
	}

	
}


我们再把这个案例扩充一下,我们可以给事件监听器传入参数,案例如下:
package corejava2.event;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ButtonTest {
	public static void main(String[] args) {
		ButtonFrame frame = new ButtonFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}

/**
 * A frame with a button panel
 */
class ButtonFrame extends JFrame {
	public static final int DEFAULT_WIDTH = 300;
	public static final int DEFAULT_HEIGHT = 200;
	
	public ButtonFrame() {
		setTitle("ButtonTest");
		setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

		// add panel to frame
		ButtonPanel panel = new ButtonPanel();
		add(panel);
	}
}

/**
 * A panel with three buttons.
 */
class ButtonPanel extends JPanel {
	public ButtonPanel() {
		// create buttons
		JButton yellowButton = new JButton("Yellow");
		JButton blueButton = new JButton("Blue");
		JButton redButton = new JButton("Red");
		
		// add buttons to panel
		add(yellowButton);
		add(blueButton);
		add(redButton);

		// create button actions
		ColorAction yellowAction = new ColorAction(Color.YELLOW);
		ColorAction blueAction = new ColorAction(Color.BLUE);
		ColorAction redAction = new ColorAction(Color.RED);

		// associate actions with buttons
		yellowButton.addActionListener(yellowAction);
		blueButton.addActionListener(blueAction);
		redButton.addActionListener(redAction);
	}

	/**
	 * An action listener that sets the panel's background color.
	 */
	private class ColorAction implements ActionListener {
		private Color backgroundColor;

		public ColorAction(Color c) {
			backgroundColor = c;
		}

		public void actionPerformed(ActionEvent event) {
			String mColor = "";

			setBackground(backgroundColor);
			if (backgroundColor == Color.YELLOW)
				mColor = "Yellow";
			else if (backgroundColor == Color.BLUE)
				mColor = "Blue";
			else if (backgroundColor == Color.RED)
				mColor = "Red";

			JOptionPane.showMessageDialog(null, "You choosed " + mColor + " button");
		}

	}
}
分享到:
评论

相关推荐

    初步接触Java事件机制

    Java事件机制是Java编程中一个重要的概念,它主要用于处理用户界面(UI)的交互操作,如按钮点击、窗口改变等事件。在这个过程中,事件、事件源和事件监听器是核心概念。下面将详细阐述这些概念及其在实际开发中的...

    java图形初步建立

    总的来说,"java图形初步建立"的学习将涵盖Java GUI的基本概念、组件使用、事件处理和布局管理。随着对这些知识点的掌握,初学者能够构建出功能丰富的图形用户界面。通过实践`MyFrame`类,你可以逐步理解并掌握Java...

    Java游戏编程初步

    Java游戏编程初步是一个适合初学者入门的专题,旨在引导学习者掌握使用Java语言进行游戏开发的基本概念和技术。在Java这个强大的编程平台上,游戏编程提供了一种有趣的实践方式,让开发者可以充分发挥自己的创造力和...

    Java游戏编程初步3.rar_Java游戏_java 游戏

    本资源包“Java游戏编程初步3.rar”显然旨在为初学者提供基础的指导,帮助他们踏入这个激动人心的世界。 标题“Java游戏编程初步3”表明这是一个系列教程的第三部分,可能涵盖了一些进阶的主题,比如游戏循环、碰撞...

    Java游戏编程初步2.rar_Java游戏

    这篇初步教程将引导你探索Java游戏编程的基础,让你在游戏开发的世界中迈出第一步。首先,我们来深入理解Java游戏编程的一些核心概念和技术。 Java作为一种广泛使用的面向对象编程语言,以其跨平台性、高效性和强大...

    java游戏编程初步源代码.rar_Java游戏

    在本"java游戏编程初步源代码"中,我们可以探索如何使用Java进行游戏开发的基础概念和实践技巧。这个压缩包包含了两个文件:`process`和`www.pudn.com.txt`。 `process`可能是一个Java类文件或源代码文件,它可能...

    AJAX在JAVA上初步应用

    而SAX解析器则采用事件驱动的方式,逐行读取XML文件,节省内存。对于简单的XML文件,DOM可能更方便;但对于大型XML文档,SAX则更为高效。 创建XML文件的JAVA代码示例: ```java import javax.xml.transform....

    Java解惑(中文版)_java_java解惑_solve65p_

    11. **Swing和AWT**:初步接触图形用户界面(GUI)开发,学习如何使用组件、布局管理和事件处理。 12. **网络编程**:理解Socket编程,以及如何在Java中实现客户端和服务器端的通信。 13. **反射和注解**:了解...

    java开发的计算器程序附源代码

    此程序在j2se下编写,主要用于熟练: 1. java基本语法例如:表达式,语句,变量声明,基本数据类型及类型转换等;...java事件驱动模型及其使用方法。 5. 熟悉MyEclipse IDE环境的基本使用。jdk的安装及环境变量的设定。

    java编写的计算器(初步理解GUI布局)

    4. **事件响应机制**:在Java中,事件处理通常涉及事件源(如按钮)、事件(如按钮被点击)和事件处理器(实现`ActionListener`的类)。当事件发生时,处理器的相应方法会被调用,这里是`actionPerformed`。 5. **...

    java开发魔塔小游戏

    3. **图形用户界面(GUI)编程**:游戏的界面通常使用Java的Swing或JavaFX库来实现,需要了解如何创建窗口、添加组件、处理用户事件等。 4. **事件监听与处理**:游戏中的交互,如玩家移动、攻击等,都需要通过事件...

    Java实验报告Java写的计算器

    【实验报告概述】 本实验报告主要涉及的是一份使用Java编程语言实现的简单...通过这样的实践,学生不仅加深了对Java语法的理解,还掌握了事件处理和布局管理等核心概念,为进一步学习和应用Java奠定了坚实的基础。

    [JWFD开源工作流]JAVA单线程时钟算法和代码(初步设计)

    本文将深入探讨JAVA单线程时钟算法在JWFD中的应用及其初步设计。 单线程时钟算法是一种用于模拟或控制时间序列的机制,常用于模拟系统、游戏引擎或者任务调度中。在JAVA中,由于其并发特性和线程安全问题,设计一个...

    服装销售系统java swing

    《基于Java Swing的服装销售系统详解》 在IT领域,开发用户友好的应用程序是至关重要的。对于初学者来说,理解并应用面向对象编程思想...同时,对网络编程的初步接触也有助于拓宽视野,为未来的复杂系统开发奠定基础。

    Java 写的斗兽棋

    在这个特定的案例中,"Java 写的斗兽棋" 是一个初学者用Java实现的小游戏,这表明你正在探索Java的基础和游戏开发的初步概念。 斗兽棋,又称兽棋,是一种两人对弈的策略棋类游戏,其规则相对简单,但包含了基础的...

    薯条贩卖机 Java 课设.zip

    同时,这个项目也是对软件工程流程的初步实践,包括需求分析、设计、编码、测试和维护,对于提升软件开发能力大有裨益。 总的来说,这个Java实现的薯条贩卖机系统是一个很好的学习平台,它涵盖了众多Java核心概念和...

    Java详解XML 初步.doc

    SAX是事件驱动的解析方式,只按顺序读取XML,适合处理大型XML文件;而Pull解析类似于SAX,也是轻量级的,但提供了更方便的API,常用于Android开发。 DOM解析涉及的主要对象接口包括: 1. Node:所有XML节点的基类,...

    Java7&Java8;(谷歌)AIP

    6. **新数据类型**:`java.util.Currency`用于货币类型,`java.time`包开始引入新的日期和时间API的初步实现。 ### Java 8(Java Platform, Standard Edition 8) #### 主要特性: 1. **Lambda表达式**:这是Java...

    java 8 lambda- expressions 学习资料,例子。练习 java example

    通过Java 8的lambda表达式,Java开发者现在能够更加高效地编写代码,特别是在处理集合和实现事件监听器时,代码变得更简洁且易于维护。Java 8的lambda表达式对于那些习惯了函数式编程的程序员来说是一大福音,它降低...

Global site tag (gtag.js) - Google Analytics