Всплывающий триггер Java в Linux

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

любые мысли о том, как обойти это?

спасибо.

EDIT: почтовый индекс

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

// 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 ответов


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

дополнение:

появляется isPopupTrigger срабатывает на mousePressed в linux.

Да, это то же самое на Mac OS X. Вы должны позвонить isPopupTrigger() Как mousePressed() и mouseReleased(). Есть связанный пример в GraphPanel.


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

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


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

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