0

所以我是一名新的 Java 程序员,我正在尝试学习如何使用 JLabel 处理 GUI 和移动图像

public class MyJava extends JFrame implements MouseListener, MouseMotionListener {
JLabel aJLabel;

public MyJava() {
    this.setLayout(null);
    aJLabel = new JLabel();
    ImageIcon aImageIcon = new ImageIcon(this.getClass().getResource("avatar.jpg"));
    aJLabel.setIcon(aImageIcon);
    aJLabel.setBounds(50, 50, 200, 150);
    this.getContentPane().add(aJLabel);
    this.addMouseListener(this);
    this.addMouseMotionListener(this);
    this.setTitle("Title");
    this.setSize(700, 600);
    this.setLocationRelativeTo(null);
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {
    new MyJava();
}
@Override
public void mouseClicked(MouseEvent e) {
    System.out.println("mouseClicked, X=" + e.getX() + " ,Y=" + e.getY() + " ,Count=" + e.getClickCount());
}
@Override
public void mouseDragged(MouseEvent e) {
    aJLabel.setBounds(e.getX()-120, e.getY()-120, 200, 150);
}
@Override
public void mousePressed(MouseEvent e) {
    System.out.println("mousePressed");
}
@Override
public void mouseReleased(MouseEvent e) {
    System.out.println("mouseReleased");
}
@Override
public void mouseEntered(MouseEvent e) {
    System.out.println("mouseEntered");
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseMoved(MouseEvent e) {
    System.out.println("mouseMoved");
}}

在此处输入图像描述

我正在努力学习如何:

1-从我点击的鼠标位置开始拖动?

仅当鼠标在图像边界上而不是在所有 JLabel 上时才进行 2 拖动?

4

1 回答 1

1

仅当鼠标在图像边界上而不是在所有 JLabel 上时才拖动?

将侦听器添加到标签,而不是框架。

从我点击的鼠标位置开始拖动?

确定单击标签时的起点并计算每个事件的鼠标位置变化。基本代码是:

public class DragListener extends MouseInputAdapter
{
    Point location;
    MouseEvent pressed;

    public void mousePressed(MouseEvent me)
    {
        pressed = me;
    }

    public void mouseDragged(MouseEvent me)
    {
        Component component = me.getComponent();
        location = component.getLocation(location);
        int x = location.x - pressed.getX() + me.getX();
        int y = location.y - pressed.getY() + me.getY();
        component.setLocation(x, y);
     }
}

使用这个类的代码是:

DragListener drag = new DragListener();
label.addMouseListener( drag );
label.addMouseMotionListener( drag );
于 2017-04-27T17:04:40.597 回答