拖动图像

时间:2016-05-27 07:35:21

标签: java image

我可以按下并拖动我的图像但是,当我按下图像的中心时,当我拖动时,光标将始终移动到图像的左上角

这就是我对图片的意思

我按下了图像的中心 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) {

    }

}

1 个答案:

答案 0 :(得分:2)

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

解决方案是获取图像的宽度和高度,将两个值除以2,然后从光标的坐标中减去它们,然后将它们分配给图像的x和y。这将使图像中心始终位于光标所在的位置。

更好的解决方案是在点击图像上的光标时找到光标相对于图像的确切位置,然后相应地调整光标坐标,然后再将它们指定给图像的x和y。