一、事件机制
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编程语言开发的简易画图应用程序。这个程序为用户提供了一个简单的画板界面,允许用户进行基本的绘画操作,比如绘制直线、曲线、矩形、椭圆等图形,并能进行颜色选择、画笔...
总的来说,"QT做的简易画板"是一个很好的学习和实践Qt编程的例子,它涉及到GUI设计、事件处理、绘图操作等多个关键领域,同时也展示了Qt框架在开发高效、功能丰富的应用程序方面的强大能力。通过这个项目,开发者...
在Android开发中,创建一个简易画板应用是一个常见的练习,它可以帮助开发者深入理解自定义View的概念和绘图机制。这个源码项目就是基于这样的目的,使用了Android的自定义View来构建一个基本的画板功能,让用户可以...
这个“mfc简易画板程序”是针对初学者的一个示例项目,旨在帮助他们理解和实践MFC框架的基本用法。 在MFC中,一个应用程序通常包含多个类,这些类对应于Windows的消息处理机制。例如,CWinApp类代表应用程序本身,...
综上所述,"java swing简单画板"项目涵盖了Java GUI编程的基础知识,包括Swing组件的使用、绘图功能的实现、事件处理以及布局管理。开发者通过这些技术,为用户提供了一个简易但功能齐全的画板工具,满足了基本的...
【MFC简易画板】是基于Microsoft Foundation Class (MFC) 库开发的一款简单图形编辑器,它利用VC++开发工具实现,旨在提供类似于Windows操作系统自带的“画图”程序的功能。这款应用允许用户进行基本的绘图操作,如...
4. **交互机制**:LabVIEW支持事件驱动编程,所以画板程序可能会使用事件结构来监听用户操作,如鼠标点击和移动。当用户在画板上进行操作时,事件结构会捕获这些动作并执行相应的绘图命令。 5. **图形API**:...
QT简易画板是一款基于QT库开发的简单图形编辑工具,它允许用户进行基本的绘画操作,如绘制点、直线、矩形以及输入文本。这款应用的核心功能和特点可以从以下几个方面来详细阐述: 1. **基本图形绘制**: - **点**...
【简易画板(C语言期末作业)】是一个适合C语言初学者进行实践的项目,它为学生提供了一个基础的图形用户界面(GUI)程序,使他们能够通过简单的命令在屏幕上绘画。这个项目不仅可以帮助学生巩固C语言的基础知识,还...
在提供的源码文件“易语言画板控件的功能应用与事件源码”中,开发者可以找到具体的代码实现。通过学习和理解这段源码,可以更好地掌握易语言画板控件的使用方法,从而在自己的项目中灵活运用。 总结来说,易语言...
《图形画板简单demo》 在信息技术领域,图形画板是一种常见的交互式应用程序,它允许用户在屏幕上绘制各种图形,包括线条、矩形、椭圆等。本项目名为"图形画板简单demo",旨在提供一个基础的绘图平台,让用户能够...
【VB制作的简单画板程序】是一个利用Visual Basic(VB)开发的基础图形用户界面应用程序,它为用户提供了一个基本的绘图平台,用户可以在此平台上进行简单的绘画操作。这个程序的核心功能是画笔颜色的可变性,使得...
综上所述,Java简单画板的实现涉及了Java GUI编程的基本概念,包括组件、绘图API、事件处理和用户交互。通过学习和实践这个项目,开发者可以深入理解Java图形界面编程,并进一步扩展到更复杂的图形编辑应用。
本次课程设计的任务是开发一个“java简易画板”,旨在让学生通过实际操作来深入理解Java编程语言,特别是图形用户界面(GUI)的开发。这个项目将涵盖Java AWT(Abstract Window Toolkit)或Swing库的使用,用于创建...
在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库来创建一个基本的“画板...这个简单的画板程序为学习和实践MFC提供了一个很好的起点,同时也可以作为基础,进一步扩展成功能更丰富的图形编辑器。
2. **事件处理**:学习如何编写事件处理程序,例如鼠标点击事件、键盘按键事件,以及如何将这些事件与画板上的字符输入关联起来。 3. **画板绘图**:掌握在画板上绘制字符的基本方法,包括选择字体、颜色、大小,...
在本“VC++课程设计_windows简单画板”项目中,我们主要探讨了如何利用Microsoft的Visual C++(VC++)编程环境开发一个基础的Windows应用程序,即一个简单的画板工具。这个工具允许用户进行基本的绘图操作,如绘制...
在本项目中,“c#简易画板”是一个利用C#编程语言开发的简单绘图应用程序。这个程序的主要目的是提供一个基础的平台,让用户能够进行基本的绘画操作,如绘制直线、矩形等基本图形。下面将详细介绍这个项目涉及到的C#...
2. **消息映射(Message Mapping)**:MFC使用消息映射机制将Windows消息与成员函数关联起来。开发者会定义消息映射宏,以便在接收到特定消息时执行相应的处理函数。 3. **绘图函数**:在MFC中,通常使用CDC...
总之,MFC 画板制作涉及到了Windows图形编程的基础,包括图形对象的创建、颜色和线型的控制、鼠标事件的处理以及用户界面的构建。通过学习和实践这个项目,开发者不仅可以深化对MFC的理解,还能提高图形用户界面设计...