Java 简易画图板V1.0

Java 简易画图板V1.0

  • 需要用到的开发包:
    • java.awt
      • java.awt.event.MouseEvent
      • java.awt.event.MouseListenera
    • javax.swing
      • JFrame : 窗体类

步骤一

创建一个DrawPad类,在其中创建ShowUI方法和主函数,并于主函数中创建DrawPad类的对象并调用ShowUI方法

import javax.swing.*;
import java.awt.*;
public class DrawPad {
	public void ShowUI(){
	.....
	}
	
	public static void main(String[] args) {
		DrawPad drawPad = new DrawPad();
		drawPad.ShowUI();
	}
}

步骤二

在ShowUI方法中实现窗口的创建,属性设置,显示

public void ShowUI(){
		JFrame pad = new JFrame();//窗体的创建
		pad.setTitle("画图板(直线) V1.0");
		pad.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭时退出
		pad.setSize(800,800);//大小设置
		pad.setLocationRelativeTo(null);//使窗口显示在屏幕中间
		pad.setVisible(true);//可视化 显示到屏幕上
	}

步骤三

创建DrawListen类对鼠标进行监听

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class DrawListen implements MouseListener {
	 public void mouseClicked(MouseEvent e) {//点击
	 }
	 public void mousePressed(MouseEvent e) {//按下
	 }
	 public void mouseReleased(MouseEvent e) {//释放
	 }
	 public void mouseEntered(MouseEvent e) {//进入
	 }
	 public void mouseExited(MouseEvent e) {//离开
	 }
}

需要注意的是在创建DrawListen类时,必须要将MouseListener类中的五个方法进行重写

步骤四

在ShowUI方法中加载监听

public void ShowUI(){
		JFrame pad = new JFrame();//窗体的创建
		pad.setTitle("画图板(直线) V1.0");
		pad.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭时退出
		pad.setSize(800,800);//大小设置
		pad.setLocationRelativeTo(null);//使窗口显示在屏幕中间
		pad.setVisible(true);//可视化 显示到屏幕上
		
		// 监听加载
		DrawListen dl = new DrawListen();
		pad.addMouseListener(dl);// 窗体注册鼠标监听器
	}

对方法mousePressed和方法mouseReleased进行重写,实现对按下与释放时两个坐标的获取

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class DrawListen implements MouseListener {
	int x1,y1,x2,y2;
	 public void mouseClicked(MouseEvent e) {
	 }
	 public void mousePressed(MouseEvent e) {
		 int x = e.getX();
		 int y = e.getY();
		 x1 = x;
		 y1 = y;
	 }
	 public void mouseReleased(MouseEvent e) {
		 int x = e.getX();
		 int y = e.getY();
		 x2 = x;
		 y2 = y;
		 gr.drawLine(x1, y1, x2, y2);
	 }
	 public void mouseEntered(MouseEvent e) {
	 }
	 public void mouseExited(MouseEvent e) {
	 }
}

步骤五

Graphics实现画图


public class DrawPad {
	public void showUI() {
		JFrame pad = new JFrame();
		pad.setTitle("画图板V1.0");
		pad.setSize(800, 800);
		pad.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    pad.setLocationRelativeTo(null);
		pad.setVisible(true);
		
		// 监听加载
		DrawListen dl = new DrawListen();
		pad.addMouseListener(dl);// 窗体注册鼠标监听器
		
		// 获取Graphics - 画笔
		Graphics g = pad.getGraphics();
		// 将g中存储画笔对象地址 传给 gr
		dl.gr = g;
	}
	public static void main(String[] args) {
		DrawPad drawPad = new DrawPad();
		drawPad.showUI();
	}
}

public class DrawListen implements MouseListener {
	int x1,y1,x2,y2;// 获取 按下 与 释放的两个坐标
	Graphics gr;
	 public void mouseClicked(MouseEvent e) {
	 }
	 public void mousePressed(MouseEvent e) {
		 int x = e.getX();
		 int y = e.getY();
		 x1 = x;
		 y1 = y;
	 }
	 public void mouseReleased(MouseEvent e) {
		 int x = e.getX();
		 int y = e.getY();
		 x2 = x;
		 y2 = y;
		 // 直线
		 gr.drawLine(x1, y1, x2, y2);
	 }
	 public void mouseEntered(MouseEvent e) {
	 }
	 public void mouseExited(MouseEvent e) {
	 }
}

完成以上步骤即可实现在窗体中画出直线

补充

若要实现画圆,画矩形可以使用Graphics自带的方法:

  • drawRect(int x, int y, int width, int height) 矩形
  • drawOval(int x, int y, int width, int height) 圆
public void mouseReleased(MouseEvent e) {
		 int x = e.getX();
		 int y = e.getY();
		 x2 = x;
		 y2 = y;
		// 矩形左上角的坐标
		gr.drawRect(x1, y1, x2 - x1, y2 - y1);//矩形
		// 外切矩形左上角的坐标
		gr.drawOval(x1, y1, x2 - x1,y2 - y1);//圆
	 }

但这种方法存在局限性,即当x1<x2,y1<y2不满足时图像
所以应将x1,x2,y1,y2的四种情况考虑到
修改后:

	 public void mouseReleased(MouseEvent e) {
		 int x = e.getX();
		 int y = e.getY();
		 x2 = x;
		 y2 = y;
		gr.drawRect(Math.min(x1,x2), Math.min(y1,y2),Math.abs(x2 - x1),Math.abs(y2 - y1));//矩形
		gr.drawOval(Math.min(x1,x2), Math.min(y1,y2),Math.abs(x2 - x1),Math.abs(y2 - y1));//圆
		 }
	 }
  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值