Java 如何让用户通过鼠标移动JLabel?

Java 如何让用户通过鼠标移动JLabel?,java,swing,mouseevent,mouse,jlabel,Java,Swing,Mouseevent,Mouse,Jlabel,我在JFrame工作,我在JLabel上有这些图像,我希望用户移动它们,以便选择将它们拖动到哪里 public class Level3 extends JFrame { /** * Creates new form Level3 */ public Level3() { initComponents(); jLabel16.setVisible(false); jLabel17.setVisible(false); jLabel18.setVis

我在
JFrame
工作,我在
JLabel
上有这些图像,我希望用户移动它们,以便选择将它们拖动到哪里

public class Level3 extends JFrame {

/**
 * Creates new form Level3
 */
public Level3() {
    initComponents();     
    jLabel16.setVisible(false);
    jLabel17.setVisible(false);
    jLabel18.setVisible(false);
    jLabel19.setVisible(false);
    jLabel20.setVisible(false);
    jLabel21.setVisible(false);
    jLabel22.setVisible(false);
}    private void jButton2ActionPerformed(ActionEvent evt) {                                         
     jLabel16.setVisible(true);
    jLabel17.setVisible(true);
    jLabel18.setVisible(true);
    jLabel19.setVisible(true);
    jLabel20.setVisible(true);
    jLabel21.setVisible(true);
    jLabel22.setVisible(true);
}              

如果您只是想在JFrame中拖动标签,可以使用此选项。这绝对不是一个完美的代码,但它确实适合我。所以试着修改它,使它更好

public class Test extends JFrame implements MouseMotionListener{

        protected JLabel label; 
        protected Point currentLocation;

        public Test() {
            initComponents(); 

            setSize(new Dimension(500, 500));
            setVisible(true);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
        }

        private void initComponents() {
            label = new JLabel("some label"); 
            currentLocation = label.getLocation();

            addMouseMotionListener(this);
            add(label); 
        }

        public JLabel getLabel() {
            return label;
        }

        public void setLabel(JLabel label) {
            this.label = label;
        }


        @Override
        public void mouseDragged(MouseEvent e) {

            Point p = e.getPoint();
            currentLocation.x = (int) p.getX();
            currentLocation.y = (int) p.getY() - 250; // Height/2

            label.setLocation(currentLocation);
        }

        @Override
        public void mouseMoved(MouseEvent e) {

        }

}

并尝试使用
数组
列表
保留标签

我建议使用(定制)
布局布局。自定义布局不仅应考虑图像的位置,还应考虑定义重叠图像的分层。顺便说一句-
jLabel16.setVisible(false)使没有文本的标签消失的两个好方法是:a)给它一个空图标。b) 给它一个透明的图标(如果它需要大小的话)。你也可以按照这个问题和第一个答案进行操作。链接:
jLabel17.setLocation(evt.getXOnScreen(),evt.getYOnScreen()-y_按下);重新油漆()这一个工作图像移动,但图像和鼠标之间的空间太大