Hi Swingers,
I consider myself a good searcher, and I have searched far and wide before posting here, but sadly I have found almost
nothing on the dilemma
that I cannot dock a window or JFrame on the edge of my screen.
I did however find only one site that mentioned screen docking with some code, but it is only overriding via a window listener when dragging near the
screen edge, and results in a very ugly repositioning back and forth when dragging the frame.
If there is some library or a way around the issues I have found... I would be most grateful for a solution,
Here is an example of what I am describing...
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);
}
}
thank you kindly,
Dax