java jlabel 单击/拖动

标签 java swing drag-and-drop jlabel

当您单击并拖动它时,蓝色标签会移动。这可行,但 x/y 位置然后以一种有趣的方式跳跃。

代码如下:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

@SuppressWarnings("serial")
public class test extends JFrame implements MouseListener, MouseMotionListener {

private JPanel panel = new JPanel(null);    
private JLabel label1 = new JLabel();
private JLabel label2 = new JLabel();
private int mouseX = 200;
private int mouseY = 100;
private boolean drag = false;

public test() {
    this.add(panel);
    panel.setBackground(Color.WHITE);

    panel.add(label1);
    label1.setOpaque(true); 
    label1.setBackground(Color.BLUE);
    label1.setBounds(mouseX, mouseY, 100, 50);
    label1.addMouseMotionListener(this);
    label1.addMouseListener(this);

    panel.add(label2);
    label2.setOpaque(true); 
    label2.setBackground(Color.RED);
    label2.setBounds(mouseX + 200, mouseY, 100, 50);
    label2.addMouseMotionListener(this);
    label2.addMouseListener(this);
}

@Override
public void mousePressed(MouseEvent e) {
    if (e.getSource() == label1) {
        drag = true;
    } 
}

@Override
public void mouseReleased(MouseEvent e) {
    drag = false;
}

@Override
public void mouseDragged(MouseEvent e) {
    if (drag == true) {
        mouseX = e.getX();
        mouseY = e.getY();
        label1.setBounds(mouseX, mouseY, 100, 50);
    }
}

public void mouseMoved(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}

public static void main(String[] args) {
    test frame = new test();
    frame.setVisible(true);
    frame.setSize(600, 400);
    frame.setResizable(false);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

最佳答案

只需将其放在您的 MouseDragged 方法中:

public void mouseDragged(MouseEvent e) 
{
    if (drag == true) 
    {
        JComponent jc = (JComponent)e.getSource();
        jc.setLocation(jc.getX()+e.getX(), jc.getY()+e.getY());
    }
}

关于java jlabel 单击/拖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4894356/

相关文章:

php - 在 HTML5 中拖放多个文件?

c# - 如何创建 "Shell IDList Array"以支持将虚拟文件从 C# 拖放到 Windows 资源管理器?

wpf - DoDragDrop() - droptarget 是另一个应用程序(word 或 excel)

java - 我应该如何实现构建器的动态列表?

java - 没有这样的表问题

java - 如何获取集合中的随机范围数

java - 是否有公认的或新兴的 JSON 表单和字段定义格式?

Java - 从缓冲读取器(从套接字)读取正在暂停线程

java - 返回给定 JTextPane 位置的行号的方法?

java - 当调用 JPanel 中的一个鼠标监听器时,它们都会被调用吗?