我想要這段代碼做的事情是當我按下並拖動屏幕上的紅色球時,我希望它隨鼠標光標移動,此代碼完成這項工作,並部分取自Sun代碼,所以它是假設是有效的,但如果我移動鼠標太快,它會停止拖動鼠標...在GUI中的MouseDragging
我該如何克服這一點?
public class SwingPaintDemo3 {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() {
JFrame f = new JFrame("Swing Paint Demo");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new MyPanel());
f.pack();
f.setVisible(true);
}
}
class MyPanel extends JPanel {
private int X = 0;
private int Y = 0;
private int R = 20;
public MyPanel() {
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if ((X<=e.getX() && X+R>=e.getX()) && (Y<=e.getY() && Y+R>=e.getY())) moveVertex(e.getX(),e.getY());
}
});
addMouseMotionListener(new MouseAdapter() {
public void mouseDragged(MouseEvent e) {
if ((X<=e.getX() && X+R>=e.getX()) && (Y<=e.getY() && Y+R>=e.getY())) moveVertex(e.getX(),e.getY());
}
});
}
private void moveVertex(int x, int y) {
int OFFSET = 1;
if ((X!=x) || (Y!=y)) {
repaint(X,Y,R+OFFSET,R+OFFSET);
X=x-10;
Y=y-10;
repaint(X,Y,R+OFFSET,R+OFFSET);
}
}
public Dimension getPreferredSize() {
return new Dimension(250,200);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawString("This is my custom Panel!",10,20);
g.setColor(Color.RED);
g.fillOval(X,Y,R,R);
g.setColor(Color.BLACK);
g.drawOval(X,Y,R,R);
}
}
謝謝,這是什麼問題? – 2012-01-03 18:19:27
鼠標拖動方法中的約束檢查無法跟上鼠標的移動。 ;) – 2012-01-03 18:20:59