2016-05-27 184 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。