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绘制图形》对你有帮助,请点赞、收藏,并留下你的观点哦!