Всплывающее, или контекстные, меню (pop-up menu) — это меню, не связанные со строкой, а отображающейся в произвольно выбранной позиции на экране.
Всплывающее меню создается так же, как и обычное, за одним исключением — оно не имеет заголовка:
1 |
JPopupMenu popup = new JPopupMenu(); |
Пункты меню добавляются, как обычно:
1 2 3 |
JmenuItem item = new JmenuItem("Cut"); item.addActionListener(listener); popup.add(item); |
В отличие от строки меню, которая всегда находится в верхней части фрейма, всплывающее меню нужно принудительно выводить на экран с помощью метода show(). При этом задается родительский компонент и расположение всплывающего меню в его системе координат.
1 |
popup.show(panel, x, y); |
Обычно всплывающее меню отображается на экране< когда пользователь щелкает специально предназначенной для этого кнопкой — так называемым тригерром всплывающего меню(pop-up trigger). В системах Windows и Linux это не первая(обычно правая) кнопка мыши. Для вызова меню после щелчка кнопкой вызывается следующий метод:
1 |
component.setComponentPopupMenu(popup); |
Часто приходится размещать компонент внутри другого компонента, с которым связано выплывающее меню. Для этого чтобы дочерний компонент наследовал меню родительского компонента, надо вызвать метод:
1 |
child.setInheritsPopupMenu(true); |
Приведенные выше методы были реализованы в Java SE 5.0 для того, чтобы исключить зависимость программиста от особенностей работы с контекстным меню в конкретной системе. В предшествующих версиях Java SE приходилось устанавливать обработчик событий, связанных с мышью, и задавать представленный ниже код как в методе mousePressed(), так и методе mouseReleased():
1 2 |
if(popup.isPopupTrigger(event)) popup.show(event.getComponent(), event,getX(), event.getY())); |
Причина в том, что в некоторых системах всплывающее меню отображается при нажатии кнопки мыши, а в других — при отпускании кнопки.