Screen edge snapping
import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import javax.swing.JFrame; import javax.swing.JLabel; public class WindowSnapper extends ComponentAdapter { private boolean locked = false; private int sd = 50; public void componentMoved(ComponentEvent evt) { if (locked) return; Dimension size = Toolkit.getDefaultToolkit().getScreenSize(); int nx = evt.getComponent().getX(); int ny = evt.getComponent().getY(); // top if (ny < 0 + sd) { ny = 0; } // left if (nx < 0 + sd) { nx = 0; } // right if (nx > size.getWidth() - evt.getComponent().getWidth() - sd) { nx = (int) size.getWidth() - evt.getComponent().getWidth(); } // bottom if (ny > size.getHeight() - evt.getComponent().getHeight() - sd) { ny = (int) size.getHeight() - evt.getComponent().getHeight(); } // make sure we don't get into a recursive loop when the // set location generates more events locked = true; evt.getComponent().setLocation(nx, ny); locked = false; } public static void main(String[] args) { JFrame frame = new JFrame(""); JLabel label = new JLabel("Move this window's title bar to demonstrate screen edge snapping."); frame.getContentPane().add(label); frame.pack(); frame.addComponentListener(new WindowSnapper()); frame.setVisible(true); } }