Перетаскивание JLabel за пределы JFrame
Итак, я смотрю на это: перетаскивание jlabel по экрану
Есть ли способ перетащить JLabel (или его представление) за пределы JFrame?
Например, чтобы перетащить JLabel между JFrames, в то время как на самом деле" показывает " jlabel перетаскивается (используя http://docs.oracle.com/javase/tutorial/uiswing/dnd/intro.html )
1 ответ:
С помощью теста JWindow:
//http://stackoverflow.com/questions/4893265/dragging-a-jlabel-around-the-screen private final JWindow window = new JWindow(); @Override public void mouseDragged(MouseEvent me) { if (dragLabel == null) { return; } int x = me.getPoint().x - dragLabelWidthDiv2; int y = me.getPoint().y - dragLabelHeightDiv2; //dragLabel.setLocation(x, y); window.add(dragLabel); window.pack(); Point pt = new Point(x, y); Component c = (Component)me.getSource(); SwingUtilities.convertPointToScreen(pt, c); window.setLocation(pt); window.setVisible(true); repaint(); } @Override public void mouseReleased(MouseEvent me) { window.setVisible(false); //... }
Ниже не тестируется код: (возможно, потребуется немного массажа, чтобы работать, но это суть дела)
@Override public int getSourceActions(JComponent src) { JLabel label = (JLabel)src; window.add(label); window.pack(); window.setVisible(true); return MOVE; } //... DragSource.getDefaultDragSource().addDragSourceMotionListener(new DragSourceMotionListener() { @Override public void dragMouseMoved(DragSourceDragEvent dsde) { Point pt = dsde.getLocation(); pt.translate(5, 5); // offset window.setLocation(pt); } });