1、了解什么是事件监听

写好一个界面后,我们就会对界面进行一些操作。比如,在输入框中输入数据,点击按钮或者菜单。这些操作我们称之为一个事件。

就比如我们要监视一间房子中会发生什么事情,就会给这间房子装上一个摄像头。对于事件的处理在Java中有类似的机制。我们要监视一个按钮有没有被点击,就要给按钮装上一个类似监听器的东西。这个东西我们就叫做事件监听机制。

而监听按钮有没有被点击的这种机制就是事件监听机制。

在Java中,每个事件都对应有一个事件监听器。它们被定义在Java.awt.event这个包中。

练习:实现绘制直线、矩形、圆、圆角矩形、弧线、文字、图片、填充矩形、填充3D矩形、任意多边形。图片要使用ImageIcon getImage()

分析:

界面的实现

DrawMain.java

main()

initUI(){

实例化窗体对象,设置窗体的属性值

}

功能的实现

在窗体上按下鼠标按键,然后释放鼠标按键,在按下和释放的亮点之间绘制一个图形。

事件监听机制

事件源对象:窗体对象

事件监听方法:addMouseListener(MouseListener l);鼠标事件监听方法

事件接口(事件处理类):MouseListener

1、定义一个主类,创建一个主类新对象。

publicclassDrawmain{

public static void main(String[] args) {

Drawmain dm = new Drawmain();

dm.initUI();

}

2、实现初始化方法

在屏幕上显示出一个窗体,并且设置窗体的大小,背景颜色,窗体可见

public void initUI() {

JFrame frame = new JFrame();

Drawlistener dr = new Drawlistener();

frame.setTitle("画图界面");

frame.setSize(800, 600);

frame.setLocationRelativeTo(null);

frame.setDefaultCloseOperation(3);

3、定义一个事件接口(事件处理类)

a、public class Drawlistener implements MouseListener

{

}

b、打开API文档,重写MouseListener的所有方法(将“;”改为“{}”即为重写)

/**

* Invoked when the mouse button has been clicked (pressed and released) on a component.

*/

public void mouseClicked(MouseEvent e){}

/**

* Invoked when a mouse button has been pressed on a component.

*/

public void mousePressed(MouseEvent e){}

/**

* Invoked when a mouse button has been released on a component.

*/

public void mouseReleased(MouseEvent e){}

/**

* Invoked when the mouse enters a component.

*/

public void mouseEntered(MouseEvent e){}

/**

* Invoked when the mouse exits a component.

*/

public void mouseExited(MouseEvent e){}

c、定义两个坐标,为全局变量

Private int x1,y1,x2,y2;

d、连接坐标位置

以画直线为例:

涉及到的鼠标动作为按下释放,在按下的时候我们可以得到(x1,y1)

public void mousePressed(MouseEvent e){

x1 = e.getX();

y1 = e.getX();

在释放的时候得到(x2,y2)

public void mouseReleased(MouseEvent e){

x2 = e.getX();

y2 = e.getX();

有了这两个坐标,然后我们就可以用画笔来画直线了。

但是Graphics类是一个抽象类。

抽象类Graphics提供了一个与平台无关的绘图接口。(这样我们就可以一个编写,各处执行了,符合Java的特点)

那么要在一个平台上去执行这个程序的时候,让程序实现绘图,肯定还得有实现了Graphics类的子类对象,为我们提供绘图环境。

各平台上实现的Java系统将创建Graphics类的一个子类,来实现绘图功能,但是这个子类对程序员是透明的

因为窗体上自带画笔所以我们先在

Drawlistener类中定义:Graphics gra;

再在Drawmain主类中创建一个Drawlistener类的对象;

Drawlistener dr = new Drawlistener();

dr.gra = frame.getGraphics();

这样我们就把画笔传过去了。

然后就可以画直线了?并不是的,我们还得给窗体加上监听方法

frame.addMouseListener(dr)

注意:a、画曲线是在MouseMotionListener接口中

public void mouseDragged(MouseEvent e){}

public void mouseMoved(MouseEvent e){}

同样得重写这两个方法

b、传画笔一定得在窗体可见之后

代码:

主类

package lhy4_20.draw;

mport java.awt.Color;

mport java.awt.Graphics;

import javax.swing.Icon;

import javax.swing.JButton;

import javax.swing.JFrame;

public class Drawmain {

public static void main(String[] args) {

Drawmain dm = new Drawmain();

dm.initUI();

}

public void initUI() {

JFrame frame = new JFrame();

frame.setTitle("画图界面");

frame.setSize(800, 600);

frame.setLocationRelativeTo(null);//窗体会显示在屏幕的正中央

frame.setDefaultCloseOperation(3);//窗体关闭操作

frame.setVisible(true);

Drawlistener dr = new Drawlistener();// 实例化鼠标监听对象;

// 从窗体上获取画布对象;

dr.gra = frame.getGraphics();

//给窗体加上事件监听方法;

frame.addMouseListener(dr);

frame.addMousemotionListener(dr);

事件处理类

package lhy4_20.draw;

//定义事件处理类;该类继承来自MouseListener接口的所有属性方法;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.event.MouseMotionListener;

import javax.swing.ImageIcon;

import javax.swing.JButton;

public class Drawlistener implements MouseListener ,MouseMotionListener {

// 实现接口中的所有抽象方法;

// 定义坐标位置;

// 连接坐标位置;

/*

* private int[] xPoints = { 25, 75, 125, 85, 125, 75, 25, 65 };

* private int[] yPoints = { 40, 90, 50, 90, 150, 110, 150, 90 };

*

* String str = "Today is rainning";

*

* private char data[] = { '今', '天', '是', '星', '期', '六' };

*

* private byte data_1[] = { '0', '2', '1', '0', '9', '4' };

*/

private int x1, y1, x2, y2,x3,y3;

Graphics gra;

Graphics2D g2;

ImageIcon img;

String str;

int i;

public void mouseClicked(MouseEvent e) {

}

// 鼠标按下

public void mousePressed(MouseEvent e) {

x1 = e.getX();

y1 = e.getY();

}

// 鼠标释放

public void mouseReleased(MouseEvent e) {

x2 = e.getX();

y2 = e.getY();

// 坐标弄好后,开始画线;

// 画直线;

// gra.drawLine(x1, y1, x2, y2);

// 画矩形;

/*

* if(x1

* if(x1>x2) { gra.drawRect(x2,y2,Math.abs(x2-x1),Math.abs(y1-y2));

*

* } System.out.println(x1+","+y1+" "+x2+","+y2);

*/

// 自动填充;

// gra.fillRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x2-x1),Math.abs(y1-y2));

// 画圆;

/*

* gra.drawOval(Math.min(x1,x2),

* Math.min(y1,y2),Math.abs(x2-x1),Math.abs(y1-y2));

* System.out.println(x1+","+y1+" "+x2+","+y2);

*/

// 自动填充圆;

// gra.fillOval(x1, y1, x2, y2);

// gra.clipRect(Math.min(x1, x2),Math.min(y1,y2),Math.abs(x2-x1),Math.abs(y2-y1));

// 画圆角弧形

// gra.drawRoundRect(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x2-x1),

// Math.abs(y1-y2), Math.abs(x2/2-x1/2), Math.abs(y2/2-y1/2));

// gra.fillRoundRect(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x2-x1),

// Math.abs(y1-y2), Math.abs(x2/2-x1/2), Math.abs(y2/2-y1/2));

// gra.drawArc(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x2-x1),

// Math.abs(y1-y2),60, 90);

// gra.fillArc(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x2-x1),

// Math.abs(y1-y2),30, 45);

// gra.drawPolyline(xPoints,yPoints,8);

// gra.drawPolygon(xPoints,yPoints,8);

// 画出给定的字符串

// gra.drawString(str, x1, y1);

// 画出数组data中给定初始位置的一定长度的文本字符串;

// gra.drawChars(data, 2, 3, x1, y1);

// 画出数组data中给定初始位置的一定长度的数字字符串;

// gra.drawBytes(data_1, 2, 4, x2, y2);

// ImageIcon img = new ImageIcon("src/图片.jpeg");

// gra.drawImage(img.getImage(), x1/2, y1/2, null);

// ImageIcon img = new ImageIcon("src/图片.jpeg");

//

//

// gra.drawImage(img.getImage(), x1/2, y1/2,x1, y1,Color.BLUE,null);

// gra.setColor(Color.GREEN);

// gra.fillRect(x1/2,y1/2 , 300, 300);

}

// 实现拖动动作

public void mouseDragged(MouseEvent e) {

/* gra.drawLine(x1, y1, x2, y2); */

// 实现曲线绘制;

/*

* gra.fillRect(Math.min(x2, x1),Math.min(y2, y1), Math.abs(x1-x2),Math.abs(y1-y2));

*/

/*

* gra.fillOval(Math.min(x2, x1),Math.min(y2, y1), Math.abs(x1-x2), Math.abs(y1-y2));

*/

/* gra.drawArc(x1, y1, y1/2, 2*x1, 30, 60) */;

/*

* ImageIcon img = new ImageIcon("src/图片.jpeg");

* gra.drawImage(img.getImage(), x1/2, y1/2, null);

*/

/*

* gra.clearRect(Math.min(x2, x1),Math.min(y2, y1), Math.abs(x1-x2), Math.abs(y1-y2));

*/

/*

* for(int i=0;i<3;i++)

{ x1=x1+i; y1=y1+i;

* x2=x2+i;

y2=y2+i;

gra.drawLine(x1,y1, x2, y2);

}

*/

/*

* g2 = (Graphics2D)gra; g2.setStroke(new BasicStroke(33));

*

* /*g2.drawLine(x1, y1, x2, y2);

*/

/* g2.draw3DRect(x1, y1, Math.abs(x1-x2), Math.abs(y1-y2),true); */

/*

* g2.fill3DRect(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x2-x1), Math.abs(y1-y2), true);

*/

/*

* g2.fill3DRect(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x2-x1), Math.abs(y1-y2), true); g2.clearRect(x2/3,y1, x1/2, y1/3);

x1 = x2;

* y1 = y2;

*

*

* /*g2.setBackground(Color.pink);

*/

}

public void mouseEntered(MouseEvent e) {

}

public void mouseExited(MouseEvent e) {

}

public void mouseMoved(MouseEvent e){}

}

java绘制图形_Java绘制图形相关推荐

  1. java绘制图形_java绘制基本图形.doc

    java绘制基本图形 java绘制基本图形 1. * *** ***** 2. * * * ***** 3. ************* * * * * ************* 4. ****** ...

  2. java绘画图形_java – 动态图形对象绘画

    试图找出最好的方法来做到这一点(并且没有跨越任何具体细节,不是我不知道的). 我正在以可视方式显示图形(各种节点,边缘连接它们),圆圈和线条代表这样.每个节点都将在运行时添加,我无法对其进行硬编码.根 ...

  3. java水平线代码_java 绘制直线,跪求源代码???

    在几何中,直线是向两端无限延伸的,本实例所说的绘制直线,实际上是绘制直线上两点之间的线段,线段在实际生产和生活中经常使用.运行程序,将在窗体上绘制线段,效果如图1.1所示.图... 在几何中,直线是向 ...

  4. java 字母图形_Java字母图形

    问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形,请找出这个图形的规律,并输出一个 ...

  5. java jpanel隐藏_java – 绘制JPanel隐藏菜单

    我有一个JPanel,在其上执行自定义绘画,可能需要15秒. 问题是当我在绘制JPanel的同时点击一个菜单时,绘画正在菜单上完成,并且选项不可见. (见图中扭曲的文字) 如果我在绘画完成后单击菜单, ...

  6. java绘制棋盘_java绘制五子棋棋盘

    本文实例为大家分享了java绘制五子棋棋盘的具体代码,供大家参考,具体内容如下 源码: import javax.imageio.ImageIO; import javax.swing.*; impo ...

  7. java五子棋棋盘_java绘制五子棋棋盘代码示例

    本篇文章小编给大家分享一下java绘制五子棋棋盘代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 代码如下: import javax.imag ...

  8. java drawstring 模糊_Java绘制文字质量太低的解决方案?

    使用 Graphics2D 绘图结果如下: 文字周边非常模糊.想要效果是: 请问如何使用java实现这种清晰的绘制文字的效果呢? 更新 代码如下: public static void pressTe ...

  9. 实验楼Java写计算器_Java版图形界面计算器

    Java 版图形界面计算器 实验说明及介绍 环境登录 无需密码自动登录,系统用户名 shiyanlou,密码 shiyanlou 环境介绍 本实验环境采用带桌面的 Ubuntu Linux 环境,实验 ...

最新文章

  1. 北大吴思教授:人脑视觉机制有望开启下一代深度神经网络
  2. 【Deep Learning笔记】神经网络基础
  3. Android LayoutInflater详解(转)
  4. 实验任务四:登录界面、实验任务五:猜数字
  5. eplan可运行于linux系统吗,Eplan安装对电脑操作系统的要求
  6. linux df命令功能,Linux df命令简要介绍
  7. gradle groovy_适用于Java开发人员的Groovy吗? 认识Gradle,Grails和Spock
  8. JDK1.8中如何用ScriptEngine动态执行JS
  9. python怎样画动态文字_Python制作动态字符图的实例
  10. ubuntu18 安装完怎么设置中文输入法?
  11. jenkins-邮件通知
  12. Thread-start()-,它是怎么让线程启动的呢,Java面试问项目
  13. 防淘宝关闭二维码案例
  14. 小爱音箱 电脑 麦克风_外观全面升级,小米小爱音箱Art体验
  15. Shell到底是什么?
  16. matlab添加坐标,Matlab绘图添加直角坐标轴
  17. 图像坐标球面投影_一种将球面图像投影至平面图像的方法与流程
  18. java里面case是什么意思_什么是Java中的switch case语句以及如何使用它?
  19. 四旋翼自主飞行器探测跟踪系统项目的随笔
  20. 陈怡暖:非农克星LMCI数据今晚出炉

热门文章

  1. 演讲《云图,让阅读更精彩(Better Cloudary™, Better Reading)》
  2. Bzoj2732 [HNOI2012]射箭
  3. Sublime text 3 SVN插件及使用方法
  4. proc文件系统探索 之 以数字命名的目录
  5. UVA 11367 Full Tank? 最短路
  6. Oracle中的AWR,全称为Automatic Workload Repository
  7. django的动态url,url里含有参数,含有参数的url
  8. 《软件需求十步走》阅读笔记5
  9. 斯坦福《机器学习》Lesson4感想--1、Logistic回归中的牛顿方法
  10. csu 最优对称路径(bfs+记忆化搜索)