Como aciono os eventos MouseMotionListener em tempo real?
Estou tentando criar um programa de desenho gráfico que permita ao usuário desenhar pixels vermelhos na tela, arrastando o mouse sobre ela. De certa forma, você pode pensar neste programa como o programa Paint da Microsoft, mas apenas com a ferramenta de desenho a lápis e a cor vermelha.
Infelizmente, omouseDragged()
função no meu programa não está funcionando corretamente. Irá pular alguns pixels da tela se eu mover o mouse muito rápido, assim:
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);
}
}
}