Вопрос

У меня есть 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 с изображением на нем.

Это было полезно?

Решение

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top