`
lazyee
  • 浏览: 15494 次
社区版块
存档分类
最新评论

事件机制与简单画板

    博客分类:
  • java
阅读更多
一、事件机制
1、事件参与者
事件机制的参与者有三个:事件源,监听器方法(事件类型),事件的处理者。
事件源:事件源是发起动作的对象,java中所有的图形界面组件都可以成为事件源对象。
监听器方法:监听器方法监听某个对象,一旦它发起监听器可识别的动作,监听器方法产生反馈信息。Java中有4种常用的监听器:ActionListener()、   MouseListener()、MouseMotionListener()、KeyListener()。
事件的处理者:最终执行反馈行为的对象,这个类必须实现事件接口。

2、 事件机制流程
事件源发起动作,监听器监听到动作的发生,捕获动作信息及事件源相关信息,然后激活数据处理对象,将收集的动作和信息交给事件处理对象,事件处理对象根据信息执行相应的反馈行为。

3、 实例
现在运用事件机制对简单登录界面进行处理,使之根据输入的账号密码做出相应反应。
先建立一个Login类实现建立一个简单登录界面,代码与之前的一样,只需增加实例化一个事件处理类,并为登录按钮添加监听器。然后建立一个事件处理类,实现监听及反馈效果。具体代码如下:
	//Login类在设置窗体可见语句前加上两条语句:
	//实例化一个LoginListener事件处理类对象
	LoginListener ll = new LoginListener(txtName,pwf);
	//给事件源jb实例化一个动作监听器方法,绑定事件处理类
	jb.addActionListener(ll);

	//事件处理类
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class LoginListener implements ActionListener {
	
	JTextField txt;
	JPasswordField pwf;
	//定义构造方法,传递txt,pwf的地址
	public LoginListener(JTextField txt,JPasswordField pwf){
		this.txt = txt;
		this.pwf = pwf;
	}
	
	// 实现抽象类
	public void actionPerformed(ActionEvent e) {
		//用两个数组接收账号密码输入框的内容
		String str1 = txt.getText();
		String str2 = new String(pwf.getPassword());
		//判断账号是否输入正确
		if(str1.equals("admin")){
			//若账号输入正确,判断密码是否正确,正确则打开一个新界面,错误则弹出提示框
			if(str2.equals("admin")){
				JFrame jf = new JFrame();
				jf.setSize(300, 200);
				jf.setDefaultCloseOperation(2);
				jf.setVisible(true);
			}else{
				JOptionPane.showMessageDialog(null, "密码输入错误,请重新输入");
			}
		//账号错误则继续判断密码输入
		}else if(str2.equals("admin")){
			JOptionPane.showMessageDialog(null, "账号输入错误,请重新输入");
			}else{
				JOptionPane.showMessageDialog(null, "账号密码输入错误,请重新输入");
			}
		//System.out.println("你点击了按钮");
		
		
	}

}
由上可得事件机制一般实现步骤:
1、 确定事件源
2、 确定要监听的动作及相应的反馈动作,创建事件处理类实现接口。
3、 实例化事件处理类对象
4、 给事件源添加监听器方法

二、简单画板
在了解怎么给事件源添加监听器之后,就可以试着实现类似系统软件“画图”的简单画板了。例如:按下“Line”按钮就可以画线,按下“Oval”按钮就可以画椭圆。
在开始编写程序前,先总结一下程序中要用到的类。
1、 实现画板需要的API类:JFrame,JPanel,JButton,ImageIcon。
2、 绘制图形需要的类:Graphics,Graphics2D(Graphics的一个子类),Color,JColorchooser。
3、 事件接口类:ActionListener,MouseListener。
下面以画线为例,分析监听器接口的具体实现。
在这里使用MouseListener监听器,MouseListener中有5个抽象方法,分别对鼠标的按下、松开、单击、进入、退出动作进行监控。
我们知道,要画出一条线就得要知道这条线段的起点和终点坐标,在程序中可以用getX()和getY()方法实现。这样就可以在mousePressed()方法中获得按下鼠标时的坐标,在mouseReleased()方法中获得松开鼠标时的坐标,并进行画线操作。
有了坐标以后,要想画线还要有一块画布(Graphics对象),然后就可以通过Graphics对象调用画线的方法了。注意:在声明Graphics对象后,它是没有值的,如果直接运行会报错(空指针异常)。此时,我们需要在定义画板的类中用getGraphics()方法获取画布,接着将画布用构造函数传递给监听器。
以上是用监听器实现画线的单一动作,拓展一下,在窗体上添加几个按钮,一种按钮对应一种操作,还加一个按钮来控制颜色。
要实现这种目的,关键是要获取按钮上的文本,用if语句来判断文本内容,进行相应操作。具体代码如下:
先定义一个SimpleDraw类,实现画板界面初始化:
import java.awt.FlowLayout;
import java.awt.Graphics;

import javax.swing.JButton;
import javax.swing.JFrame;

public class SimpleDraw extends JFrame{

	/**
	 * 程序的入口主函数
	 */
	public static void main(String[] args) {
		//实例化一个SimpleDraw类的对象
		SimpleDraw sd = new SimpleDraw();
		//调用初始化窗口
		sd.initUI();

	}
	/**
	 * 定义实现简单面板窗口方法
	 */
	public void initUI(){
		this.setTitle("简单画板");
		this.setSize(500,500);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(3);

		//设置流体布局
		this.setLayout(new FlowLayout());
		//实例化按钮
		JButton jbLine = new JButton("Line");
		JButton jbRect = new JButton("Rect");
		JButton jbOval = new JButton("Oval");
		JButton jbColor = new JButton("Color");
		//添加按钮
		this.add(jbLine);
		this.add(jbRect);
		this.add(jbOval);
		this.add(jbColor);
		//为按钮添加动作监听器,改变图形颜色
		ActListener al = new ActListener();
		jbLine.addActionListener(al);
		jbRect.addActionListener(al);
		jbOval.addActionListener(al);
		jbColor.addActionListener(al);
		
		//设置窗体可见
		this.setVisible(true);
		
		//获取事件源上的Graphics对象
		Graphics g = this.getGraphics();
		//实例化一个DrawListener事件处理类,传递g的值
		DrawListener dl = new DrawListener(g);
		//给事件源添加鼠标监听器方法,绑定事件处理类对象
		this.addMouseListener(dl);
	}
}
	
	接下来创建鼠标监听器:
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class DrawListener implements MouseListener{
	//定义接收坐标点的参数
	int x1,y1,x2,y2;
	private Graphics g;
	//定义构造方法,传递g的值
	public DrawListener(Graphics g){
		this.g = g;
	}
	
	//按下鼠标时实现的动作
	public void mousePressed(MouseEvent e) {
		//获得鼠标按下时的坐标
		x1 = e.getX();
		y1 = e.getY();
	}

	public void mouseReleased(MouseEvent e) {
		//获得鼠标释放时的坐标
		x2 = e.getX();
		y2 = e.getY();
		
		//设置颜色改变
		g.setColor(ActListener.color);
		//输出点击的按钮上的文字
		System.out.println("str = " +ActListener. str);
		//判断按钮上的文字,根据文字的不同执行不同操作
		if(ActListener.str.equals("Line")){
			System.out.println("画一条直线");
			//画一条直线
			g.drawLine(x1, y1, x2, y2);
		}else if(ActListener.str.equals("Rect")){
			System.out.println("画一个矩形");
			//画一个矩形
			g.drawRect(x1, y1, Math.abs(x2-x1),Math.abs(y2-y1));
		}else if(ActListener.str.equals("Oval")){
			System.out.println("画一个椭圆");
			//画一个椭圆
			g.drawOval(x1, y1, Math.abs(x2-x1), Math.abs(y2-y1));
		}
	}
	
	public void mouseEntered(MouseEvent e) {
		System.out.println("进入");
	}

	public void mouseExited(MouseEvent e) {
		System.out.println("退出");
	}
	
	public void mouseClicked(MouseEvent e) {
		System.out.println("单击");
	}

}

	定义动作监听器:
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JColorChooser;

public class ActListener implements ActionListener{
	public static Color color;
	public static String str;
	public void actionPerformed(ActionEvent e) {
		//判断按钮是否为Color
		if(e.getActionCommand().equals("Color")){
			//若是,则弹出颜色设置界面,并设置颜色
			//不指定父窗体,弹出窗口名称,默认颜色
			color = JColorChooser.showDialog(null, "颜色界面", Color.BLACK);
			System.out.println("Color="+color);
		}else{
			//不是,则获得按钮文本并输出,方便之后的判断
			str = e.getActionCommand();
			System.out.println("str="+str);
		}
	}

}
分享到:
评论

相关推荐

    C# 2010 简易画板

    【C# 2010 简易画板】是一个基于C# 2010编程语言开发的简易画图应用程序。这个程序为用户提供了一个简单的画板界面,允许用户进行基本的绘画操作,比如绘制直线、曲线、矩形、椭圆等图形,并能进行颜色选择、画笔...

    QT做的简易画板

    总的来说,"QT做的简易画板"是一个很好的学习和实践Qt编程的例子,它涉及到GUI设计、事件处理、绘图操作等多个关键领域,同时也展示了Qt框架在开发高效、功能丰富的应用程序方面的强大能力。通过这个项目,开发者...

    Android简易画板源码

    在Android开发中,创建一个简易画板应用是一个常见的练习,它可以帮助开发者深入理解自定义View的概念和绘图机制。这个源码项目就是基于这样的目的,使用了Android的自定义View来构建一个基本的画板功能,让用户可以...

    mfc简易画板程序适合新人

    这个“mfc简易画板程序”是针对初学者的一个示例项目,旨在帮助他们理解和实践MFC框架的基本用法。 在MFC中,一个应用程序通常包含多个类,这些类对应于Windows的消息处理机制。例如,CWinApp类代表应用程序本身,...

    java swing简单画板

    综上所述,"java swing简单画板"项目涵盖了Java GUI编程的基础知识,包括Swing组件的使用、绘图功能的实现、事件处理以及布局管理。开发者通过这些技术,为用户提供了一个简易但功能齐全的画板工具,满足了基本的...

    MFC简易画板

    【MFC简易画板】是基于Microsoft Foundation Class (MFC) 库开发的一款简单图形编辑器,它利用VC++开发工具实现,旨在提供类似于Windows操作系统自带的“画图”程序的功能。这款应用允许用户进行基本的绘图操作,如...

    画板_画板_labview程序_源码

    4. **交互机制**:LabVIEW支持事件驱动编程,所以画板程序可能会使用事件结构来监听用户操作,如鼠标点击和移动。当用户在画板上进行操作时,事件结构会捕获这些动作并执行相应的绘图命令。 5. **图形API**:...

    QT简易画板

    QT简易画板是一款基于QT库开发的简单图形编辑工具,它允许用户进行基本的绘画操作,如绘制点、直线、矩形以及输入文本。这款应用的核心功能和特点可以从以下几个方面来详细阐述: 1. **基本图形绘制**: - **点**...

    简易画板(C语言期末作业)

    【简易画板(C语言期末作业)】是一个适合C语言初学者进行实践的项目,它为学生提供了一个基础的图形用户界面(GUI)程序,使他们能够通过简单的命令在屏幕上绘画。这个项目不仅可以帮助学生巩固C语言的基础知识,还...

    易语言画板控件的功能应用与事件

    在提供的源码文件“易语言画板控件的功能应用与事件源码”中,开发者可以找到具体的代码实现。通过学习和理解这段源码,可以更好地掌握易语言画板控件的使用方法,从而在自己的项目中灵活运用。 总结来说,易语言...

    图形画板简单demo

    《图形画板简单demo》 在信息技术领域,图形画板是一种常见的交互式应用程序,它允许用户在屏幕上绘制各种图形,包括线条、矩形、椭圆等。本项目名为"图形画板简单demo",旨在提供一个基础的绘图平台,让用户能够...

    VB制作的简单画板程序

    【VB制作的简单画板程序】是一个利用Visual Basic(VB)开发的基础图形用户界面应用程序,它为用户提供了一个基本的绘图平台,用户可以在此平台上进行简单的绘画操作。这个程序的核心功能是画笔颜色的可变性,使得...

    java简单画板

    综上所述,Java简单画板的实现涉及了Java GUI编程的基本概念,包括组件、绘图API、事件处理和用户交互。通过学习和实践这个项目,开发者可以深入理解Java图形界面编程,并进一步扩展到更复杂的图形编辑应用。

    java简易画板

    本次课程设计的任务是开发一个“java简易画板”,旨在让学生通过实际操作来深入理解Java编程语言,特别是图形用户界面(GUI)的开发。这个项目将涵盖Java AWT(Abstract Window Toolkit)或Swing库的使用,用于创建...

    mfc制作画板

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库来创建一个基本的“画板...这个简单的画板程序为学习和实践MFC提供了一个很好的起点,同时也可以作为基础,进一步扩展成功能更丰富的图形编辑器。

    易语言画板字符输入

    2. **事件处理**:学习如何编写事件处理程序,例如鼠标点击事件、键盘按键事件,以及如何将这些事件与画板上的字符输入关联起来。 3. **画板绘图**:掌握在画板上绘制字符的基本方法,包括选择字体、颜色、大小,...

    VC++课程设计_windows简单画板

    在本“VC++课程设计_windows简单画板”项目中,我们主要探讨了如何利用Microsoft的Visual C++(VC++)编程环境开发一个基础的Windows应用程序,即一个简单的画板工具。这个工具允许用户进行基本的绘图操作,如绘制...

    c#简易画板

    在本项目中,“c#简易画板”是一个利用C#编程语言开发的简单绘图应用程序。这个程序的主要目的是提供一个基础的平台,让用户能够进行基本的绘画操作,如绘制直线、矩形等基本图形。下面将详细介绍这个项目涉及到的C#...

    MFC简单画板

    2. **消息映射(Message Mapping)**:MFC使用消息映射机制将Windows消息与成员函数关联起来。开发者会定义消息映射宏,以便在接收到特定消息时执行相应的处理函数。 3. **绘图函数**:在MFC中,通常使用CDC...

    MFC 画板制作源代码

    总之,MFC 画板制作涉及到了Windows图形编程的基础,包括图形对象的创建、颜色和线型的控制、鼠标事件的处理以及用户界面的构建。通过学习和实践这个项目,开发者不仅可以深化对MFC的理解,还能提高图形用户界面设计...

Global site tag (gtag.js) - Google Analytics