Как отобразить пользовательские PopupMenu в JComboBox - PullRequest
0 голосов
/ 16 апреля 2020

JComboBox отображает список при нажатии. Вместо списка я хочу отобразить JPopupMenu. В следующем коде событие инициируется, но всплывающее окно не отображается. Почему?

JComboBox box = new JComboBox();

box.addPopupMenuListener(new PopupMenuListener() {
   @Override
   public void popupMenuWillBecomeVisible(PopupMenuEvent e) {      
     popupMenu.show(box, 0, box.getHeight());
   }
   ...
});

1 Ответ

0 голосов
/ 17 апреля 2020

В качестве альтернативы можно использовать mouseListener. Из-за JDK-ошибки https://bugs.java.com/bugdatabase/view_bug.do?bug_id=4144505 необходимо добавить mouseListener ко всем потомкам следующим образом:

 MouseAdapter comboPopupAdapter = new MouseAdapter() {
      @Override
      public void mousePressed(MouseEvent e) {
        popupMenu.show(box, 0, box.getHeight());
      }
    };
    box.addMouseListener(comboPopupAdapter);
    for (Component c : box.getComponents()) {
      c.addMouseListener(comboPopupAdapter);
    }
...