Skip to content

Instantly share code, notes, and snippets.

@hadifar
Last active May 26, 2017 04:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hadifar/302d85c444a1c318fd2dc5122c4b2f96 to your computer and use it in GitHub Desktop.
Save hadifar/302d85c444a1c318fd2dc5122c4b2f96 to your computer and use it in GitHub Desktop.
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