Last active
May 26, 2017 04:36
-
-
Save hadifar/302d85c444a1c318fd2dc5122c4b2f96 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import javax.swing.*; | |
import java.awt.*; | |
import java.awt.event.MouseAdapter; | |
import java.awt.event.MouseEvent; | |
public class DragLabel extends JPanel { | |
private String[] layerStrings = {"Text1 (0)", "Text2 (1)", "Text3 (2)"}; | |
private DragLabel() { | |
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); | |
JLayeredPane layeredPane = new CJLayerPane(); | |
add(layeredPane); | |
} | |
private JLabel createColoredLabel(String text, Point origin) { | |
JLabel label = new JLabel(text); | |
label.setVerticalAlignment(JLabel.TOP); | |
label.setHorizontalAlignment(JLabel.CENTER); | |
label.setOpaque(true); | |
label.setForeground(Color.black); | |
label.setSize(50, 50); | |
label.setBorder(BorderFactory.createLineBorder(Color.black)); | |
label.setLocation(origin); | |
return label; | |
} | |
public class CJLayerPane extends JLayeredPane { | |
CJLayerPane() { | |
setPreferredSize(new Dimension(300, 310)); | |
setBorder(BorderFactory.createTitledBorder("Move the Mouse to Move Duke")); | |
MoveMeMouseHandler handler = new MoveMeMouseHandler(); | |
addMouseListener(handler); | |
addMouseMotionListener(handler); | |
Point origin = new Point(10, 20); | |
int offset = 35; | |
for (int i = 0; i < layerStrings.length; i++) { | |
JLabel label = createColoredLabel(layerStrings[i], origin); | |
add(label, new Integer(i)); | |
origin.x += offset; | |
origin.y += offset; | |
} | |
} | |
} | |
public class MoveMeMouseHandler extends MouseAdapter { | |
private int xOffset; | |
private int yOffset; | |
private JLabel draggy; | |
private String oldText; | |
@Override | |
public void mouseReleased(MouseEvent me) { | |
if (draggy != null) { | |
draggy.setText(oldText); | |
draggy.setSize(draggy.getPreferredSize()); | |
draggy = null; | |
} | |
} | |
public void mousePressed(MouseEvent me) { | |
JComponent comp = (JComponent) me.getComponent(); | |
Component child = comp.findComponentAt(me.getPoint()); | |
if (child instanceof JLabel) { | |
xOffset = me.getX() - child.getX(); | |
yOffset = me.getY() - child.getY(); | |
draggy = (JLabel) child; | |
oldText = draggy.getText(); | |
draggy.setText("What a drag"); | |
draggy.setSize(draggy.getPreferredSize()); | |
} | |
} | |
public void mouseDragged(MouseEvent me) { | |
if (draggy != null) { | |
System.out.println("draggy called"); | |
draggy.setLocation(me.getX() - xOffset, me.getY() - yOffset); | |
} | |
} | |
} | |
private static void createAndShowGUI() { | |
//Create and set up the window. | |
JFrame frame = new JFrame("LayeredPaneDemo"); | |
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); | |
JComponent newContentPane = new DragLabel(); | |
newContentPane.setOpaque(true); | |
frame.setContentPane(newContentPane); | |
frame.pack(); | |
frame.setVisible(true); | |
} | |
public static void main(String[] args) { | |
javax.swing.SwingUtilities.invokeLater(DragLabel::createAndShowGUI); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment