Dieser Code dient zum Zeichnen auf JPanel. In der paintComponent(Graphics)
versuche ich, Kurven über wiederholte Graphics2D#fillOval(x, y, with, height)
zu zeichnen.Wie zeichnet man eine kontinuierliche Kurve von wiederholten Ovalen beim schnellen Ziehen mit dem Mauszeiger?
Die App funktioniert OK, und wenn ich den Mauszeiger langsam ziehen; es zeichnet eine kontinuierliche Kurve, wie ich es brauche. Aber wenn ich den Mauszeiger schneller ziehe, sind die Punkte getrennt und keine kontinuierliche Kurve.
Also, wie man eine kontinuierliche Kurve zeichnen, auch wenn ich das Ziehen beschleunigen?
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;
public class Painter extends JPanel {
int x, y;
ArrayList<Point> points;
public Painter() {
setBackground(Color.white);
points = new ArrayList<>();
MouseHandler listener = new MouseHandler();
this.addMouseMotionListener(listener);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(600, 600);
}
private class MouseHandler extends MouseAdapter implements MouseMotionListener {
@Override
public void mouseDragged(MouseEvent e) {
Point point = new Point(e.getX(), e.getY());
points.add(point);
repaint();
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
for (Point point : points) {
g2d.fillOval(point.x, point.y, 15, 15);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame();
f.setContentPane(new Painter());
f.pack();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
});
}
}
Zeichnen Sie ein Oval von Punkt in einer Linie zum nächsten Punkt – MadProgrammer
Bitte beachten Sie bearbeiten zu beantworten. –