Как добавить всплывающее меню в JFrame в визуальном редакторе netbeans

Я уже пытаюсь добавить всплывающее меню в JFrame по дизайну в визуальном редакторе Netbeans, но это не работает. Может ли кто-нибудь пошагово подсказать мне, как его добавить ?? Спасибо большое!


person Ahmad Vatani    schedule 30.04.2014    source источник


Ответы (1)


Проблема в том, что JPopupMenu не является компонентом, который изначально виден или добавлен в контейнер. Таким образом, просто перетащив его в рамку представления дизайна, вы не окажете визуального влияния на представление дизайна.

Но если вы посмотрите на исходный код или навигатор, вы увидите jPopupMenu, объявленный как член класса и созданный в методе initComponents().

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

введите здесь описание изображения

  1. В навигаторе вы увидите файл jPopupMenu1. Вы можете добавить JMenus или JMenuItems, щелкнув его правой кнопкой мыши и выбрав Add from Palette.
  2. Затем вы можете добавить слушателя к JMenuItem, щелкнув правой кнопкой мыши JMenuItem в навигаторе и выбрав Events -> Actions -> actionPerformed.

Чтобы появился JPopupMenu, вам нужно добавить MouseListener к компоненту, будь то рама или другой компонент. Например (к кадру):

  1. Выберите кадр в навигаторе, щелкните его правой кнопкой мыши и выберите Events -> Mouse ->, и вам нужно будет реализовать как mousePressed , так и mouseReleased, так как разные платформы имеют разные триггеры всплывающих окон, Windows — mouseReleased, а Mac — mousePressed ( не цитируйте меня).
  2. Создайте метод для отображения всплывающего меню.

    private void showPopupMenu(MouseEvent e) {
       jPopupMenu1.show(this, e.getX(), e.getY());
    }
    
  3. Реализуйте свои методы mousePressed и mouseReleased

    private void formMousePressed(MouseEvent evt) {                                  
        if (evt.isPopupTrigger()) {
            showPopupMenu(evt);
        }
    }                                 
    
    private void formMouseReleased(MouseEvent evt) {                                   
        if (evt.isPopupTrigger()) {
            showPopupMenu(evt);
        }
    } 
    

введите здесь описание изображения

person Paul Samsotha    schedule 30.04.2014
comment
Tnx за ваш ответ, но я использую Mac, а также реализую свои методы mousePressed и mouseReleased, но не работаю :( - person Ahmad Vatani; 30.04.2014
comment
Ооо, извините :( У меня была ошибка. Все в порядке. Триггер всплывающего окна Mac тоже 'mousePressed()' :) - person Ahmad Vatani; 30.04.2014