Открывайте popupMenu только при щелчке мышью Swing - PullRequest
0 голосов
/ 30 января 2012

У меня есть вопрос, связанный с JPopupMenu, который, возможно, кто-то может мне помочь.

Насколько я вижу, JPopupMenu открывается, когда вы нажимаете JMenu (это в JMenuBar) или когда вы наводите курсор мыши на JMenu (если это в JPopupMenu).

Итак, у меня есть JMenuBar, содержащий JMenu (назовем его «Файл»). Когда я нажимаю «Файл», открывается JPopupMenu, который содержит JMenuItem и другое JMenu (назовем его «Свойства»). Есть ли способ, которым я могу применить то же поведение к свойствам JMenu, что и в Файл JMenu: открывает JPopup только тогда, когда пользователь щелкает по нему и не наводит курсор на него?

Я знаю, что это пытается избежать нормального поведения JMenu, но у кого-нибудь из вас есть идея, возможно ли это?

1 Ответ

1 голос
/ 01 февраля 2012

Это что-то очень специфическое, и я не знаю, много ли людей делают это.:) В любом случае, я оставляю решение для этого на случай, если кому-то это понадобится.

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

Итак, в качестве решения я расширил эти защищенные обработчики в своих собственных реализациях MyOwnBasicMenuUI и MyOwnBasicMenuItemUI и применил свойсобственное поведение.Теперь у меня есть JMenu, который открывается только тогда, когда пользователь щелкает по нему, и остается открытым, пока пользователь не щелкнет где-то еще.Если кто-то хочет получить более подробную информацию, я могу предоставить их.

Спасибо

...