Java画图板的实现
大家好,这是我的第一篇博客,具体内容呢就是如何用Java写一个画图板。
这个过程可以分为 一是画板界面的实现,二是画板的监听以及画图的实现。
首先我们需要用到JFrame这个类,先创建一个界面窗体,然后去设置这个窗体的各种属性,以及设置窗体可见。代码如下:
import javax.swing.JButton;
public class DrawUI {
// 显示界面的方法
public void shouUI() {
// 创建一个窗体
JFrame drawFrame = new JFrame();
// 设置窗体的属性
drawFrame.setSize(1200, 800);
drawFrame.setLocationRelativeTo(null);
drawFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置窗体的布局为流式布局
drawFrame.setLayout(new FlowLayout());
// 添加监听器
DrawListener drawL = new DrawListener();
// 给窗体添加监听器
drawFrame.addMouseListener(drawL);
// 存储所有信息的数组
String[] typeArr = { "直线", "三角形", "水滴", "方形", "圆形" };
// 遍历数组
for (int i = 0; i < typeArr.length; i++) {
// 创建一些按钮
JButton btn = new JButton(typeArr[i]);
// 将按钮添加到窗体上
drawFrame.add(btn);
// 监听器
btn.addActionListener(drawL);
}
// 设置可见
drawFrame.setVisible(true);
// 获取窗体的画布
Graphics g = drawFrame.getGraphics();
// 让监听器的画布,等于窗体的画布
drawL.g = g;
}
// 主方法
public static void main(String[] args) {
// 创建一个界面对象
DrawUI ui = new DrawUI();
// 显示界面
ui.shouUI();
}
}
到这里呢,我们就已经创建了一个可视的窗体,接下来需要做的就是给这个窗体添加我们需要实现的画图功能。这里我们需要用到监听器这个东西。假设我们要画一条直线,一般是按紧鼠标拖动一段距离,松开鼠标的时候直线便会从起点处画到终点处,我们可以新建一个监听的类,在Buttonlistener类中我们实现MouseListener接口,这样子就可以实现对鼠标的监听了。这里需要注意的是:监听器是接口,所以我们要实现接口里的所有方法,具体操作可以选中MouseListener后,按F3查看源码,再复制到我们新创建的监听器的类里即可。具体代码如下:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class DrawListener implements MouseListener, ActionListener {
// 记录坐标的数字
int startx, starty, endx, endy;
// 画布
Graphics g;
// 记录图形信息
String shapeType = "直线";
public void setGraphics(Graphics g) {
this.g = g;
}
// 按钮点击的时候,执行
public void actionPerformed(ActionEvent e) {
// 获取按钮上的信息
String action = e.getActionCommand();
// 记录按钮信息
shapeType = action;
System.out.println(shapeType);
}
public void mousePressed(MouseEvent e) {
// 获取坐标
startx = e.getX();
starty = e.getY();
}
public void mouseReleased(MouseEvent e) {
// 获取坐标
endx = e.getX();
endy = e.getY();
System.out.println(shapeType);
if ("直线".equals(shapeType)) {
g.drawLine(startx, starty, endx, endy);
} else if ("三角形".equals(shapeType)) {
for (int i = 0; i < 256; i++) {
// 画一个三角形
Color TColor = new Color(100, 200, i);
g.setColor(TColor);
g.drawLine(startx, starty, endx, i + 200);
}
} else if ("水滴".equals(shapeType)) {
for (int i = 0; i < 300; i++) {
// 画一颗水滴
Color c = new Color(180-i, 205, 230);
g.setColor(c);
g.fillOval(startx, starty, 200 - i, 200 - i);
}
} else if ("方形".equals(shapeType)) {
g.setColor(Color.pink);
g.fillRect(startx, starty, 200, 200);
}else if("圆形".equals(shapeType)) {
g.setColor(Color.YELLOW);
g.fillOval(startx, starty, 150, 150);
}
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}
至此我们就实现了画图板的一些简单功能。
(写的很粗糙,有什么问题欢迎大家私信与我交流学习。)