Java всплывающий триггер в Linux - PullRequest
9 голосов
/ 21 апреля 2011

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

Есть мысли о том, как обойти это?

спасибо.

РЕДАКТИРОВАТЬ: почтовый код

Код для всплывающего меню

// this is called from mousePressed and mouseReleased
if (e.isPopupTrigger() && !e.isConsumed()) {
    // show the popup menu
}

Этот код вызывается при нажатии / перетаскивании правой кнопкой мыши (этоСторонний код, но он с открытым исходным кодом, поэтому я могу изменить при необходимости)

// this is called on all mouse events
if (buttonAction.mouseButton != 0)
{
    // handle the event
}

Ответы [ 3 ]

12 голосов
/ 21 апреля 2011

Да, используйте isPopupTrigger(), как показано здесь .

Добавление:

похоже isPopupTrigger запущено на mousePressed в Linux.

Да, в Mac OS X то же самое. Вам нужно позвонить isPopupTrigger() из mousePressed() и mouseReleased(). Есть похожий пример в GraphPanel.

1 голос
/ 21 апреля 2011

MouseEvent.isPopupTrigger (). Возвращает, является ли это событие мыши событием запуска всплывающего меню для платформы.

edit -: необходимо выполнить проверку как mousePressed для linux, так и mouseReleased для windows.

0 голосов
/ 29 мая 2011

Я думаю, что правильной процедурой в вашем случае должна быть унификация, где и когда показывать всплывающее окно.Поскольку событие перетаскивания, если оно существует, следует за событием пресса, следует избегать записи логики для отображения всплывающего окна в событии прессы (а затем также записывать логику в событии пресса для отображения всплывающего окна) .Некоторые пользователи чувствуют себя хорошо, перемещаясь по всплывающему окну, удерживая кнопку всплывающего окна, а некоторые другие пользователи просто не заботятся или не знают.Но в вашем случае вы не сможете перемещаться по всплывающему меню при перетаскивании без добавления дополнительного кода.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...