Java 简易画图板V1.0
- 需要用到的开发包:
- java.awt:
- java.awt.event.MouseEvent
- java.awt.event.MouseListenera
- javax.swing:
- JFrame : 窗体类
- java.awt:
步骤一
创建一个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));//圆
}
}