小白第一步|JAVA画图板初学——Graphics

JAVA画图板的第一步——Graphics

本次我们试着在窗体上画一条线,鼠标按住的时候起,鼠标松开的时候止;
首先当然是构建一个showUI函数创建一个窗体,在窗体上我们才可以进行下面的操作

		JFrame line = new JFrame();
		//设置窗体属性
		line.setSize(1200, 800);
		line.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//设置窗体可见
		line.setVisible(true);		

由于这个事件是有关于鼠标的位置,归属于鼠标事件,因此我们创建一个监听器,是MouseListener的一个接口

public class mouse implements MouseListener

由于接口中的方法都是抽象方法,我们需要在这个类中重新定义MouseListener接口内的所有方法

	//showUI函数
	//设置监听器类
	mouse m = new mouse();
	//给窗体设置监听器
	line.addMouseListener(m);
	//监听器
	@Override
	public void mouseClicked(MouseEvent e) {	
	}
	@Override
	public void mousePressed(MouseEvent e) {
	}
	@Override
	public void mouseReleased(MouseEvent e) {
	}
	@Override
	public void mouseEntered(MouseEvent e) {
	}
	@Override
	public void mouseExited(MouseEvent e) {
	}

这样的话我们就实现了鼠标事件的应用
再想想:我们画线要分几步?
首先是按住的时候给个坐标(x1,y1)
然后松开的时候给个坐标(x2,y2)
再根据这个坐标把线画出来,大功告成
因此,我们首先要在监听器设置坐标值的数据

	int x1,x2,y1,y2;

mousePressed函数中返回起始坐标值

public void mousePressed(MouseEvent e) {
		x1 = e.getX();
		y1 = e.getY();
	}

mouseRelease函数中返回结束坐标值

public void mouseReleased(MouseEvent e) {
		x2 = e.getX();
		y2 = e.getY();
	}

下面是画线!!!!
画线我们需要使用的就是我们这次的重点:Graphics
Graphics是一个可以用来画一些简单图形的类
Graphics是一个抽象类,我们同样不能在监听器类中直接new一个对象
那该怎么办呢?
在这里插入图片描述
想到了!
在我们的showUI方法中new一个然后搞回去就成了!
那就得在showUI函数中开一个Graphics的对象
特别:这里我们不需要创建画布,因为窗体的组件都有一个getGraphics函数返回这个组件的画布

//showUI函数
	//设置graphics类
	Graphics g = line.getGraphics();
	//传入g
	m.setG(g);

然后在监听器设置一个Graphics类型的引用,并将传入的画布给赋到这个引用上

//监听器类
	Graphics g;
	
	public void setG(Graphics g){
		this.g = g;
	}

最后,在mouseRelease函数中将这个线画出来
这里我们需要调用Graphics类中的drawLine方法
参数是前两个是起点坐标值,后两个是终点坐标值

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

最后就是惊喜刺激的跑程序时间!在这里插入图片描述
Graphics类中还有许多相关的函数,例如画矩形的drawRect,画椭圆的drawOval等;

附代码:
lineUI.java

import java.awt.Graphics;
import java.util.Random;

import javax.sound.sampled.Line;
import javax.swing.JFrame;

public class LineUI {
	Random random = new Random();
	
	
	
	public void showUI(){
		//设置窗体
		JFrame line = new JFrame();
		//设置窗体属性
		line.setSize(1200, 800);
		line.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//设置监听器类
		mouse m = new mouse();
		//给窗体设置监听器
		line.addMouseListener(m);
		
		
		//设置窗体可见
		line.setVisible(true);
		//设置graphics类
		Graphics g = line.getGraphics();
		//传入g
		m.setG(g);
	
	}
	public static void main(String[] args){
		LineUI g = new LineUI();
		g.showUI();
		
	}
}

mouse.java

import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;

public class mouse implements MouseListener{
	int x1,x2,y1,y2;
	Graphics g;
	
	
	
	public void setG(Graphics g){
		this.g = g;
	}
	@Override
	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();
			
		g.drawLine(x1, y1, x2, y2);
	}

	@Override
	public void mouseEntered(MouseEvent e) {
	}

	@Override
	public void mouseExited(MouseEvent e) {
	}
	
}

还有一个小问题:三角分形
利用Graphics,我们可以先选择三个点A,B,C,然后再选择一个随机点P,让这个点随机和A,B,C相连取中点记为新的P,重复操作
代码:

public void mousePressed(MouseEvent e) {	
		point[count][0] = e.getX();
		point[count][1] = e.getY();
		count++;
		if(count==4){
			for(int i = 0;i < 100000000;i++){
				int nowpoint=random.nextInt(4);
				int x =(point[nowpoint][0] + point[3][0]) / 2;
				int y =(point[nowpoint][1] + point[3][1]) / 2;
				point[3][0] = x;
				point[3][1] = y;
				g.drawOval(x, y, 0, 0);
			}
		}
	}

最后会出现这样的图像
重复10000次
在这里插入图片描述
重复1000000次
在这里插入图片描述
重复100000000次
在这里插入图片描述
本期over!

发布了36 篇原创文章 · 获赞 11 · 访问量 2916

猜你喜欢

转载自blog.csdn.net/yeweij226/article/details/90142916
今日推荐