2013-04-06 1 views
1

Мне показалось странным, что в моем проекте мышь не всегда слышна. Кто-нибудь еще сталкивался с этим? Или я делаю что-то неправильно? Я должен иногда щелкнуть его несколько раз, прежде чем он откроется. Я жду между кликами, чтобы узнать, является ли это проблемой производительности.Java MouseListener не всегда работает

JButton btnPin = new JButton("Pin"); 
btnPin.addMouseListener(new MouseAdapter() { 
    public void mouseClicked(MouseEvent arg0) { 
     if(staffPinDialog == null || staffPinDialog.isShowing() == false) 
      staffPinDialog = new StaffPinDialog(idClicked);     
    } 
}); 

StaffPinDialog - это JDialog, где ссылка была создана в другом месте. idClicked также всегда инициализируется.

+0

Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –

+2

'mouseClicked (...)' не всегда вызывается с каждым нажатием кнопки мыши и, в частности, не вызывается, если мышь перемещается между нажатием и отпусканием. 'mousePressed (...)' или 'mouseReleased (...)' лучше, но, сказав это, вы не должны использовать MouseListeners вообще в этом качестве, а скорее должны использовать ActionListeners (согласно ответу JB Nizet) или AbstractActions. –

ответ

5

Вы не должны использовать MouseListener для обнаружения щелчков на кнопках. Вместо этого используйте ActionListener.

Это также будет иметь дополнительное преимущество в том, что вы можете нажать кнопку с помощью клавиатуры.

+1

... и автоматически выключит прослушиватель, если на кнопке вызывается 'setEnabled (false)' и больше соответствует использованию Actions - более надежных объектов-слушателей, которые имеют больше типов поведения и состояний, чем ActionListeners, и легко распределяется между кнопками. 1+ –

+0

Спасибо, это очень помогает. –