Najprościej będzie jeżeli skorzystać z dwóch JFrame. Na potrzeby przykładu nazwijmy je First i Second. Konstruktor klasy First może wyglądać np. tak:
Second s;
public DoubleFrame() {
initComponents();
addComponentListener(new ComponentAdapter() {
@Override
public void componentMoved(ComponentEvent e) {
s.setLocation(getX() + getWidth(), getY() + ((getHeight() - s.getHeight()) / 2));
}
@Override
public void componentResized(ComponentEvent e) {
s.setLocation(getX() + getWidth(), getY() + ((getHeight() - s.getHeight()) / 2));
}
});
s = new Second();
s.setLocation(getX() + getWidth(), getY() + ((getHeight() - s.getHeight()) / 2));
s.setVisible(true);
}
Warto również ustawić dla Second
setUndecorated(true);
P.S.
Nie wiem dlaczego, ale przy pierwszym przesuwaniu okna event odpowiedzialny za przesunięcie nie przychodzi. Od drugiego razu jest ok... :/
P.S.S.
Oczywiście kod odpowiedzialny za przesuwanie drugiej ramki wydziel gdzieś w jedno wspólne miejsce ;)