失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > java绘制图形_Java绘制图形

java绘制图形_Java绘制图形

时间:2024-05-18 01:39:20

相关推荐

java绘制图形_Java绘制图形

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。