Java简易画板的实现
## 构建一个用于画图的窗口
配置一下窗口的基本属性,按照如下顺序
创建一个类继承JFrame 创建该类无参方法 方法中编写:
- 窗口页面的名字(setTitle)/采用new对象里面传窗口名字
- 窗口长度,高度(setSize)
- 保证开关同步方法(setDefaultCloseOperation)
- 设定画板在中央(setLocationRelativeTo(null))
- 创建流的布局( setLayout() )
- 配置实现目标功能的名字
- 窗口可见方法(setVisible)
- 重写JFrame中的画笔方法paint()
import javax.swing.*;
import java.awt.*;
public class DemoTest extends JFrame {
DrawListener1 drawl = new DrawListener1();
public void initUI1(){
JFrame jf = new JFrame("画板");
//创建JFrame对象 导入其中的包
// jf.setTitle("画板");
//修改程序的名字
jf.setSize(1000,800);
//创建画板的尺寸
jf.setDefaultCloseOperation(EXIT_ON_CLOSE);
//关闭时,会同时结束当前运行状态
jf.setLocationRelativeTo(null);
//设定画板在中央
jf.setLayout(new FlowLayout());
//创建流的布局,第一行不够,第二行会接着存储,不收窗口伸缩影响
String [] s = {"直线","矩形","圆形"};//设定需要实现功能的名字
for (int i = 0; i < s.length; i++) {//
JButton jButton = new JButton(s[i]);
jButton.addActionListener(drawl);
jf.add(jButton);
}
jf.setVisible(true);
//打开数据可视化窗口
jf.addMouseListener(drawl1); //实时监听
drawl.setGraphics(jf.getGraphics());//获取画笔
}
public void paint(Graphics graphics)
//画笔
{
super.paint(graphics);
}
这里我们写一个鼠标监听器,用于接收用户在窗口上的操作
package Demo.Test;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class DrawListener1 implements ActionListener,MouseListener {
//ActionListener中具有actionPerformed抽象方法,需要把抽象方法实现
//同理MouseListener(鼠标鼠标监听器) 中有五个抽象方法,也需要重写
int x,y,x1,y1;//初始坐标,结束坐标
String shapeType;
Graphics graphics = null;//画笔初始化
public void setGraphics(Graphics graphics) {//提供获取画笔方法
this.graphics = graphics;
}
public void actionPerformed(ActionEvent e) {
//这个方法就是你希望触发事件时程序要做什么。
shapeType = e.getActionCommand ();
//获取其中字符串输出
System.out.println (shapeType);
}
@Override
public void mouseClicked(MouseEvent e) {//鼠标监听器的5个功能
System.out.println("点击");
}
@Override
public void mousePressed(MouseEvent e) {
x = e.getX();
y = e.getY();
System.out.println("按下");
}
@Override
public void mouseReleased(MouseEvent e) {
x = e.getX();
y = e.getY();
System.out.println("释放");
switch(shapeType)
{
case "直线":
graphics.drawLine(x,y,x1,y1);
//绘制直线 按照API参数配置即可
break;
case "矩形":
//这里写的只是矩形的部分情况
graphics.drawRect(Math.min(x,y),Math.min(y,y1),Math.abs(x1-x),Math.abs(y1-y));//绘制矩形 使用了数学的方法绘制其中部分情况
break;
case "圆形":
graphics.drawOval(Math.min(x,y),Math.min(y,y1),Math.abs(x1-x),Math.abs(y1-y));
// 在该图形上下文的坐标系中的点 (x1, y1)和 (x2, y2)之间绘制一行,使用当前颜色
default:break;
}
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("进入");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("离开");
}
}
最后启动当前的main方法调用
public static void main(String[] args) {
new DemoTest().initUI1();
}
会实现这么居中的一个窗口
稍微画一会hhh