Java (Swing) — перетаскивание двух окон одновременно

Как сделать так, чтобы одно окно перемещалось вместе с другим? т. е. я хотел бы, чтобы JDialog следовал за JFrame, когда JFrame перетаскивается. Если JFrame перемещается на (+5, +20), JDialog должен двигаться так же.

Я пытался использовать ComponentListeners, но я получаю события перетаскивания только фрагментами, из-за чего окно JDialog дергается при перетаскивании основного JFrame. Я пытался использовать MouseListeners, но не могу понять, как обнаруживать события в фактическом кадре JFrame.


person Community    schedule 09.04.2009    source источник


Ответы (3)


Насколько я знаю, в AWT нельзя перемещать несколько окон. Чтобы движения вызывались в одно и то же время, я думаю, вы хотите, чтобы декорации JFrame отображались PL&F. Включите специальный лайфхак для PL&F, чтобы выполнять движения самостоятельно, перемещая оба окна почти одновременно. У вас все еще может быть проблема с открытием окон только для того, чтобы скрыть их, что приведет к некоторому снижению производительности.

person Tom Hawtin - tackline    schedule 09.04.2009
comment
Можете ли вы указать мне какие-либо конкретные классы для PL&F, которые я могу использовать, чтобы начать этот хак? - person ; 10.04.2009

Попробуйте использовать событие ComponentListener.componentMoved вместо отслеживания событий перетаскивания в JFrame.

person Lawrence Dol    schedule 09.04.2009

Метод прослушивания компонентов работает отлично. Я сделал что-то вроде этого:

Point p = this.getLocation();
p.x += this.getWidth() + 10;
this.getOwner().setLocation(p);

Где «10» — это пространство между текущим окном (JDialog) и его владельцем, который находится справа от него.

person GuruKay    schedule 27.01.2012