【发布时间】:2016-03-25 04:58:06
【问题描述】:
此代码用于在 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);
}
});
}
}
【问题讨论】:
-
从一行中的一个点到下一个点画一个椭圆
-
请参阅编辑回答。
标签: java swing paintcomponent graphics2d mousemotionlistener