Как создать всплывающее меню в Java

Как создать всплывающее меню в JavaВсплывающее, или контекстные, меню (pop-up menu) - это меню, не связанные со строкой, а отображающейся в произвольно выбранной позиции на экране.

Всплывающее меню создается так же, как и обычное, за одним исключением - оно не имеет заголовка:

JPopupMenu popup = new JPopupMenu();

Пункты меню добавляются, как обычно:

JmenuItem item = new JmenuItem("Cut");
item.addActionListener(listener);
popup.add(item);

Как создать всплывающее меню в Java

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

popup.show(panel, x, y);

Обычно всплывающее меню отображается на экране< когда пользователь щелкает специально предназначенной для этого кнопкой - так называемым тригерром всплывающего меню(pop-up trigger). В системах Windows и Linux это не первая(обычно правая) кнопка мыши. Для вызова меню после щелчка кнопкой вызывается следующий метод:

component.setComponentPopupMenu(popup);

Часто приходится размещать компонент внутри другого компонента, с которым связано выплывающее меню. Для этого чтобы дочерний компонент наследовал меню родительского компонента, надо вызвать метод:

child.setInheritsPopupMenu(true);

Приведенные выше методы были реализованы в Java SE 5.0 для того, чтобы исключить зависимость программиста от особенностей работы с контекстным меню в конкретной системе. В предшествующих версиях Java SE приходилось устанавливать обработчик событий, связанных с мышью, и задавать представленный ниже код как в методе mousePressed(), так и методе mouseReleased():

if(popup.isPopupTrigger(event))
popup.show(event.getComponent(), event,getX(), event.getY()));

Причина в том, что в некоторых системах всплывающее меню отображается при нажатии кнопки мыши, а в других - при отпускании кнопки.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *