import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class Circle extends JPanel {
private final ArrayList<Point> point = new ArrayList<>();
public Circle() {
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent event) {
point.add(event.getPoint());
repaint();
}
});
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent event) {
point.add(event.getPoint());
repaint();
}
});
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(new Color(0, 0, 128));
for (Point p : point)
g.fillOval(p.x, p.y, 15, 15);
}
public static void main(String[] args) {
JFrame f = new JFrame();
f.add(new Circle());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(800, 600);
f.setVisible(true);
}
}
这是示例程序。
绘制它显示丑陋的差距:
我看了很多关于java paint的教程,但每次他们的解释都像上面的示例程序。 Java如何做出像Microsoft Paint一样流畅的画笔样式?
最佳答案
您需要在点之间画线,而不是在每个点画椭圆。这是一个稍微修改过的 paintComponent
方法:
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(new Color(0, 0, 128));
g2.setStroke(new BasicStroke(15f,
BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND));
for (int i = 1; i < point.size(); i++)
g2.draw(new Line2D.Float(point.get(i-1), point.get(i)));
}
结果:
关于Java基础画图程序丑刷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30871408/