Java实现涂鸦
时间: 2023-11-13 22:10:42 浏览: 43
在Java中,可以使用MouseListener和MouseMotionListener来处理鼠标事件,从而实现涂鸦功能。下面是一个简单的Java涂鸦示例:
```
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DoodleExample extends JPanel {
private List<Point> points;
private Color color;
private int strokeWidth;
public DoodleExample() {
points = new ArrayList<>();
color = Color.BLACK;
strokeWidth = 2;
addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
points.add(e.getPoint());
repaint();
}
});
addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
points.add(e.getPoint());
repaint();
}
});
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setColor(color);
g2d.setStroke(new BasicStroke(strokeWidth, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
for (int i = 0; i < points.size() - 1; i++) {
Point p1 = points.get(i);
Point p2 = points.get(i + 1);
g2d.drawLine(p1.x, p1.y, p2.x, p2.y);
}
}
public void setColor(Color color) {
this.color = color;
}
public void setStrokeWidth(int strokeWidth) {
this.strokeWidth = strokeWidth;
}
public static void main(String[] args) {
JFrame frame = new JFrame("Doodle Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DoodleExample doodle = new DoodleExample();
frame.add(doodle);
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
doodle.requestFocus();
}
}
```
在这个示例中,我们创建了一个继承自JPanel的类DoodleExample,并使用MouseListener和MouseMotionListener处理鼠标事件。我们使用points列表来记录鼠标移动的轨迹,color表示当前绘制的颜色,strokeWidth表示当前绘制的线条宽度。在paintComponent()方法中,我们使用Graphics2D类的setRenderingHint()方法来设置抗锯齿效果,然后使用setColor()方法设置绘图颜色,setStroke()方法设置线条宽度,drawLine()方法绘制线条。最后,我们创建了一个JFrame并将DoodleExample添加到其中,以显示涂鸦效果。