簡體   English   中英

Java基本繪畫程序難看刷

[英]Java basic paint program ugly brush

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

結果:

在此輸入圖像描述

你的代碼描繪了很多單點,所以如果你快速移動鼠標,你就會有間隙。 在繪制填充橢圓的位置,您必須添加一些東西以將當前點連接到前一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM