【发布时间】:2015-08-24 00:39:51
【问题描述】:
我正在尝试创建一个图形绘制程序,允许用户通过将鼠标拖到屏幕上来绘制红色像素。因此,在某种程度上,您可以将此程序视为 Microsoft 的 Paint 程序,但只有铅笔绘图工具和红色。
不幸的是,我的程序中的mouseDragged() 函数无法正常工作。如果我将鼠标移动得太快,它会跳过屏幕上的一些像素,如下所示:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class FrameView extends JFrame {
JPanel panel;
Graphics2D drawingContext;
public static void main(String[] args) {
new FrameView();
}
public FrameView() {
panel = new JPanel();
panel.addMouseMotionListener(new MouseControls());
panel.setBackground(Color.WHITE);
this.add(panel);
this.setSize(new Dimension(500, 500));
this.setTitle("Drawing Program");
this.setVisible(true);
drawingContext = (Graphics2D)panel.getGraphics();
}
private class MouseControls extends MouseAdapter {
@Override
public void mouseDragged(MouseEvent e) {
int x = e.getX();
int y = e.getY();
final int WIDTH = 1;
final int HEIGHT = 1;
Shape pixel = new Rectangle(x, y, WIDTH, HEIGHT);
drawingContext.setColor(Color.RED);
drawingContext.draw(pixel);
}
}
}
【问题讨论】:
-
You
MouseListener工作正常,这就是它的工作方式,它不会报告每个像素位置,而只是最可能的位置更新。相反,在点之间画线 -
这不是自定义绘画在 Swing 中的工作方式,永远不要使用
getGraphics,它可以返回null,并且当重新绘制组件时,您对它的任何绘画都可以被删除。请参阅 Painting in AWT and Swing 和 Performing Custom Painting 了解有关如何在 Swing 中进行绘画的更多详细信息