2010-04-24 26 views
0

好的事件監聽器添加一個JLabel以JLayeredPane的,所以,由於某種原因,當我在構造函數中添加組件的JLayeredPane的:從不拖拉

JLabel label = new JLabel(); 

label.setSize(100,100); label.setText(「This works」); add(label); 它工作得很好,但如果稍後在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

+0

請提供更多代碼,特別是MouseMotionListener的註冊 – fish 2010-04-25 05:14:06

回答

0

從您的代碼段的拖動方法被調用方式目前尚不清楚。

也許你應該註冊一個MouseMotionListener(在mouseDragged事件處理程序中有你的移動代碼)給JLabel。

+0

該類實現MouseListener,MouseMotionListener和MouseWheelListener。我知道正在移動的作品,但只有在您由於某種原因在類的構造函數中添加Component時才起作用。 – Cody 2010-04-24 14:39:33

+0

您仍然必須將偵聽器添加到組件。 – camickr 2010-04-25 03:23:11

+0

我該怎麼做? – Cody 2010-04-25 04:30:14