2015-11-14 1 views
1

Я пытаюсь добавить JDialog в том месте, где пользователь нажал на JFrame. Если я использую только один экран, следующий код JDialog работы:Показать JDialog на том же экране, что и его родительский JFrame в нужном месте

public class PopupCanevas extends JDialog { 

    public PopupCanevas(JFrame frame, Point position) { 
     super(frame); 
     this.setLocation(position); 
    } 
} 

Однако, если я использую конфигурацию двойного монитора, я не в состоянии показать диалог на экране, где находится мой кадр в позиции, на которую пользователь нажал. Вышеприведенный код отобразит диалог в нужном месте, но на моем главном экране, независимо от того, на каком экране находится мой кадр. Я попытался следующие:

this.setLocation(frame.getLocation(position)); 

Он покажет диалог на нужный экран, но в левом верхнем углу, а не в нужном месте.

Как я могу получить желаемое поведение?

+0

'setLocationRelativeTo'? – MadProgrammer

+0

@MadProgrammer Он показывает JDialog на том же экране, что и его родительский JFrame где-то по центру. Тем не менее, я все еще не могу разместить его в нужном месте. У вас есть идея? – TheWanderingMind

+0

О, ладно, утренний мозг. Вам нужно преобразовать точку мыши (от MouseEvent) в координаты экрана, что-то вроде MouseEvent # getLocationOnScreen должно работать, если вы хотите центрировать диалог вокруг точки, убедитесь, что вы используете пакет в диалоговом окне, прежде чем использовать его размер/предпочтительный размер – MadProgrammer

ответ

2

Вам необходимо преобразовать точку мыши (из MouseEvent) в координаты экрана, что-то вроде MouseEvent#getLocationOnScreen должно работать.

Если вы хотите, чтобы центрировать диалог вокруг точки, убедитесь, что вы используете pack в диалоговом окне перед использованием его size/preferredSize

Смежные вопросы