import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MoveTogetherDemo {
public MoveTogetherDemo() {
JFrame frame = new JFrame("MoveTogetherDemo JFrame");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
JDialog dialog = new JDialog(frame, "JDialog");
dialog.setSize(300, 200);
dialog.setLocation(frame.getX() - dialog.getWidth(), frame.getY() + 50);
dialog.setVisible(true);
MovingTogether movingTogether = new MovingTogether(frame, dialog);
}
public static void main(final String[] args) {
Runnable gui = new Runnable() {
@Override
public void run() {
MoveTogetherDemo moveTogetherDemo = new MoveTogetherDemo();
}
};
SwingUtilities.invokeLater(gui);
}
}
class MovingTogether {
private final ComponentAdapter componentAdapter;
public MovingTogether(final JFrame frame, final JDialog dialog) {
componentAdapter = new ComponentAdapter() {
@Override
public void componentMoved(final ComponentEvent e) {
Window win = (Window) e.getComponent();
if (win == frame) {
dialog.setLocation(frame.getX() - dialog.getWidth(), frame.getY() + 50);
} else if (dialog.isVisible()) {
frame.setLocation(dialog.getX() + dialog.getWidth(), dialog.getY() - 50);
}
}
@Override
public void componentResized(final ComponentEvent e) {
componentMoved(e);
}
};
frame.addComponentListener(componentAdapter);
dialog.addComponentListener(componentAdapter);
}
}