2016-05-27 148 views
2

我能够按和拖我的形象,但然而,当我按下图像的中心,光标会一直移动到图像的上左上角,当我拖着拖动图像

这是什么我的意思是用图片

我在图像 enter image description here

光标总是会移动到图像的上左上角的中心按下,当我拖着 enter image description here

当我拖动图像时,如何确保光标位于图像的中心?

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseMotionListener; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

@SuppressWarnings("serial") 
public class ChessGUI extends JPanel implements MouseListener, MouseMotionListener { 
    final int rows = 8; 
    final int cols = 8; 
    int x = 0; 
    int y = 0; 
    int carx= 0; 
    int cary =0; 
    ImageIcon car; 

    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     for (int row = 0; row < 8; row++) { 
      for (int col = 0; col < 8; col++) { 
       x = 50*col; 
       y = 50*row; 
       if ((row % 2) == (col % 2)) 
        g.setColor(Color.white); 
       else 
        g.setColor(Color.black); 
       g.fillRect(x,y,50,50); 
      } 
     } 
     car = new ImageIcon("resources/image/48/br.png"); 
     car.paintIcon(this, g, carx, cary); 
    } 

    public ChessGUI() { 
     addMouseListener(this); 
     addMouseMotionListener(this); 
    } 


    public static void main(String[] args) { 
     JFrame frame = new JFrame("Chess"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.pack(); 
     frame.setSize(420,450); 
     frame.setLocationRelativeTo(null); 
     frame.setResizable(true); 
     frame.setVisible(true); 
     frame.add(new ChessGUI()); 
    } 

    @Override 
    public void mouseDragged(MouseEvent evt) { 
     carx = evt.getX(); 
     cary = evt.getY(); 
     repaint(); 
    } 

    @Override 
    public void mouseMoved(MouseEvent arg0) { 

    } 

    @Override 
    public void mouseClicked(MouseEvent e) { 

    } 

    @Override 
    public void mouseEntered(MouseEvent e) { 

    } 

    @Override 
    public void mouseExited(MouseEvent e) { 

    } 

    @Override 
    public void mousePressed(MouseEvent e) { 
     int x = e.getX(); 
     int y = e.getY(); 
    } 

    @Override 
    public void mouseReleased(MouseEvent e) { 

    } 

} 
+0

难道不像减少'evt.getX();'和'evt.getY();'几个像素一样简单吗?它看起来像这些值返回鼠标的右侧。相反,尝试设置'carx = evt.getX() - SOME_CONSTANT;' 虽然要小心,鼠标的大小可能会根据操作系统等而改变。 – Draken

+0

我认为这不是你的鼠标跳到左上角,而是你只需图像通过指定图像的左上角出现在您的鼠标所在的位置。我的意思是你的图像位置是通过指定它的左上角坐标确定的,这就是你的鼠标的位置。 – Salivan

回答

2

您的光标不会移动到左上角。会发生什么情况是您的图像将其左上角移至光标所在的位置。这是因为图像的位置是通过指定其左上角坐标来确定的,所以如果将光标坐标分配给图像的x和y,则会在您的光标所在的位置绘制图像的左上角。

解决的办法是拍摄图像的宽度和高度,将两个值除以2,然后在将光标指定给图像的x和y之前从光标坐标中减去。这会使图像中心始终处于光标所在的位置。

更好的解决方案是在将图像光标放在图像上时,找到游标在图像上的确切位置,然后相应地调整游标坐标,然后将它们分配给图像的x和y。