Swing: событие мыши на JTree или других компонентах иногда пропускается

Мне нужно показать всплывающее меню на моем JTree, и я добавил слушателя мыши так:

  tree.addMouseListener(new MouseAdapter(){
     public void mouseClicked(MouseEvent me){
        if (SwingUtilities.isRightMouseButton(me)){
           //.. some code to show popup menu
        }
     }
  });

Но иногда это событие просто пропускается: я нажал, но mouseClicked() не называется. То же самое происходит с JTabbedPane: я делаю правый клик на какой-то вкладке, а иногда mouseClicked() не вызывается, но вкладка становится фактически переключенной.

UPD: это происходит примерно в 10% кликов. Слишком часто, чтобы игнорировать это.

Кстати могу добавить ChangeListener на такие JTabpedPane И это событие никогда не пропускается, но мне тоже нужно обращаться с мышью, и я абсолютно не знаю, что здесь может быть не так.

Любая помощь приветствуется.

1 ответ

Решение

Я предполагаю, что проблема в том, что в 10% кликов вы на самом деле не кликаете, а начинаете и заканчиваете перетаскивание. Вот почему событие mouseClicked не работает.

Попробуйте прослушать событие mousePressed или mouseReleased MouseAdapter (зависит от того, какое поведение вы хотите) вместо события mouseClicked.

Другие вопросы по тегам