我正在嘗試創建一個圖形繪製程序,允許用戶通過將鼠標拖到屏幕上來繪製紅色像素。所以從某種意義上說,你可以把這個程序想象成微軟的畫圖程序,但只有鉛筆繪畫工具和紅色。如何實時激發MouseMotionListener事件?
不幸的是,我的程序中的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);
}
}
}
你'MouseListener'工作正常,這是它是如何工作的,它不會報告每一個像素的位置,而只是大多likel y位置更新。相反,在點之間畫線 – MadProgrammer
這不是自定義繪畫在Swing中的工作原理,從不使用'getGraphics',它可以返回'null',並且當組件重新繪製時,它的任何東西都可以被擦除。請參閱[在AWT和Swing中繪畫](http://www.oracle.com/technetwork/java/painting-140037.html)和[執行自定義繪畫](http://docs.oracle.com/javase/tutorial/) uiswing/painting /)獲取更多關於如何在Swing中完成繪畫的細節 – MadProgrammer