Этот код предназначен для рисования на JPanel. В paintComponent(Graphics)
я пытаюсь рисовать кривые через повторяющиеся Graphics2D#fillOval(x, y, with, height)
.Как нарисовать непрерывную кривую повторяющихся овалов на быстром перемещении курсора мыши?
Приложение работает нормально, и когда я медленно курсор мыши; он рисует непрерывную кривую по мере необходимости. Но когда я ускоряю перетаскивание курсора мыши, результатом являются выделенные точки, а не непрерывная кривая.
Итак, как заставить его нарисовать непрерывную кривую, даже если я ускоряю перетаскивание?
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);
}
});
}
}
Нарисуйте овал с точки на линии к следующей точке – MadProgrammer
Пожалуйста, смотрите редактирование ответить. –