Java基础画图程序丑刷

标签 java swing paintcomponent

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);
}
}

这是示例程序。

绘制它显示丑陋的差距:

enter image description here

我看了很多关于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)));
}

结果:

enter image description here

关于Java基础画图程序丑刷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30871408/

相关文章:

java - 在 Windows 上使用 IntelliJ IDEA 生成的动态类路径时 JSP 编译失败

java - 如何获取字符串列表的唯一 ID?

java - 如何更改实现 MigLayout 的 JDesktopPane 中显示的 JInternalFrame 的大小?

java - 如何使 JDialog 处于非 Activity 状态

Java 定时器 Action 监听器

Java Swing 滚动绘图

java - 当 session 被终止时,如何从数据库中删除 session 相关信息?

java - 将 JLabel 添加到 JList 中?

java - 当我在 Java Paint 程序中更改颜色时,整个颜色会发生变化

java - CertPathValidator 和 CertPathBuilder 之间的概念区别是什么?