JWindow всегда сверху не получает фокус событий - PullRequest
3 голосов
/ 16 сентября 2009

У меня есть jwindow (установленное всегда сверху), которое вы можете щелкнуть, чтобы открыть всплывающее меню. Если пользователь щелкает правой кнопкой мыши по окну, оно показывает всплывающее меню, но затем, если пользователь щелкает по любому другому окну (например, Firefox), всплывающее меню не исчезает.

Я попытался исправить это, добавив FocusListener в jwindow, я реализовал FocusListener и переопределил


    public void focusGained(FocusEvent e) {
    System.out.println("gain" );
    }

    public void focusLost(FocusEvent e) {
    System.out.println("lost" );
    }

но событие никогда не вызывается. я также попробовал следующее,


    addWindowFocusListener(new WindowAdapter() {
        public void windowGainedFocus(WindowEvent e) {
            System.out.println("gain 2" );
        }
        });

это событие также не называется.

Все эти jwindows есть один JLabel с изображением на нем.

Ответы [ 5 ]

3 голосов
/ 16 сентября 2009

Из памяти JWindow не получают события фокуса / окна.

2 голосов
/ 26 июня 2012

Для фокусировки необходимо создать JWindow с родительским элементом Frame, например new JWindow(parentFrame). Сделайте это, и я думаю, что вы обнаружите, что он автоматически получит фокус, когда вы установите его видимым.

2 голосов
/ 26 ноября 2011

Вы должны вызвать setFocusableWindowState(true) на JWindow, чтобы позволить ему быть фокусируемым. Но этого «все еще» недостаточно. JWindow также должен иметь фокусируемые компоненты, и я все еще не могу заставить его работать. Использование JFrame setUndecorated() кажется лучшим выбором.

0 голосов
/ 16 сентября 2009

Если вы действительно хотите отобразить всплывающее меню, вы должны использовать JPopupMenu, а не реализовывать его самостоятельно.

0 голосов
/ 16 сентября 2009

Не совсем уверен, что вы пытаетесь сделать. Если вы пытаетесь скрыть всплывающее окно вручную, вам, вероятно, следует использовать WindowListener и обработать событие windowDeactivation.

...