创意画板之绘制直线、曲线、橡皮擦
这是结合一些知识点交织在一起的一个作品吧,也就玩一玩,知识点都很简单
知识点
给窗体加鼠标监听
思路
获取鼠标按压点、释放点
利用画笔的绘制方法进行各种绘制
一、鼠标监听绘制直线
监听事件处理类
public class DrawingListener extends MouseAdapter {
private int x1, y1, x2, y2;// 声明四个变量,存储按下和释放的坐标值
private Graphics g;// 声明画笔对象名(组件全部都是画出来的,要拿画笔,只要有组件对象就可以获取画笔)
private JFrame frame;// 声明窗体对象名
private Color color = Color.black;// 声明颜色属性
public DrawingListener(JFrame frame) {
this.frame = frame;
}
public void mousePressed(MouseEvent e) {
// 获取按下坐标值
x1 = e.getX();
y1 = e.getY();
// 从frame窗体上获取画笔对象 必须要在窗体可见之后才能获取画笔对象。
g = frame.getGraphics();
// 设置画笔的颜色
g.setColor(color);
}
public void mouseReleased(MouseEvent e) {
// 获取释放坐标值
x2 = e.getX();
y2 = e.getY();
g.drawLine(x1, y1, x2, y2);
}
}
界面类中
窗体可视化之后添加
public class Drawing {
DrawingListener dl;
public static void main(String[] args) {
Drawing draw = new Drawing();
draw.initUI();
}
public void initUI() {
// 实例化JFrame窗体对象,设置窗体的属性值
JFrame frame = new JFrame("Kevin之创意画板");
frame.setSize(750, 500);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(3);
frame.setLayout(new FlowLayout());// 设置窗体的布局方式为流式布局
// 实例化事件处理类的对象,对象名为dl
frame.setVisible(true);
dl = new DrawingListener(frame);
frame.addMouseListener(dl);
}
}
二、绘制曲线
怎么绘制曲线呢?
曲线就是跟随鼠标不断画直线(很短)
所以就需要给窗体添加frame.addMouseMotionListener()监听
监听类中添加
public void mouseDragged(MouseEvent e) {
System.out.println("+++");
x2 = e.getX();
y2 = e.getY();
g.drawLine(x1, y1, x2, y2);
x1 = x2;
y1 = y2;
}
界面类中添加
frame.addMouseMotionListener(dl);
三、橡皮擦
在mouseDragged(MouseEvent e)方法中更改曲线的绘制
1、获取窗体背景颜色
2、绘制填充圆或矩形
g.setColor(frame.getContentPane().getBackground());
g.fillOval(x1, y1, 20, 20);