从事件侦听器添加JLabel到JLayeredPane而不是拖动

时间:2010-04-24 05:16:30

标签: java swing

好的,所以出于某种原因当我在构造函数中向JLayeredPane添加组件时:

JLabel label = new JLabel();

label.setSize(100,100);    label.setText(“This works”);    添加(标签);    它工作得非常好,但如果稍后在JLayeredPane的父EDT中添加它,它不会让我移动对象,但它们让我看到对象。

从EDT添加:

JLabel label = new JLabel();
label.setToolTipText(url.getHost());
label.setIcon(icon);
label.setBorder(new LineBorder(null));
label.setSize(icon.getIconWidth(), icon.getIconHeight());

dressFrame.layeredPane.add(label, JLayeredPane.DRAG_LAYER);

拖动方法:

Component c = findComponentAt(e.getX(), e.getY());
            if (c instanceof JLayeredPane) {
                    pieceSelected = false;
                    return;
            }

            Point parentLocation = c.getLocation();
            xAdjustment = parentLocation.x - e.getX();
            yAdjustment = parentLocation.y - e.getY();

            movingPiece = c;
            movingPiece.setLocation(e.getX() + xAdjustment, e.getY() + yAdjustment);
            pieceSelected = true;

http://xslayer.com/upload/gui.png

1 个答案:

答案 0 :(得分:0)

从您的代码段中不清楚您的拖动方法是如何被调用的。

也许您应该在JLabel上注册MouseMotionListener(在mouseDragged事件处理程序中使用您的移动代码)。