2010-03-31 3 views
3

Это может быть глупый вопрос, но я должен спросить!Java MouseEvents не работает

У меня есть следующие фрагменты кода, которые должны запускать соответствующие методы, когда пользователь взаимодействует с объектами. По какой-то причине «foo» никогда не печатается, но «бар» есть.

myJSpinner1.addMouseListener(new java.awt.event.MouseAdapter() { 
    public void mouseEntered(java.awt.event.MouseEvent evt) { 
    System.out.println("foo"); //"foo" is not printed 
    } 
}); 

myJSpinner2.addChangeListener(new java.awt.event.ChangeListener() { 
    public void stateChanged(java.awt.event.ChangeEvent evt) { 
    System.out.println("bar"); //"bar" is printed 
    } 
}); 

У меня нет исключений или трассировки стека. Что мне не хватает в MouseListener? Спасибо заранее.

EDIT: MouseEntered отлично работает на JCheckBox, реализованном точно так же!

+0

Я понимаю, что это объяснение немного скудны. Пожалуйста, спросите, нужна ли вам дополнительная информация. :) –

ответ

3

JSpinner - это составной компонент, состоящий из текстового поля и двух кнопок. Можно добавить слушателей мыши ко всем из них, итерации по результатам getComponents() и добавления слушателя к каждому.

Однако, по моему опыту, когда что-то так много работает, вы, вероятно, ошибетесь.

Зачем вам нужна введенная мышь информация для JSpinner?
Что вы хотите делать с этим событием?

Update: Если вы хотите, чтобы предоставить информацию о всех элементах управления в панели, вы можете захотеть взглянуть на использование glasspane для обнаружения компонент под мышкой.

A Well-behaved Glasspane Александр Поточкин - хорошее место для начала.

+0

У меня есть другой компонент, в котором я хочу отобразить текст, который объясняет, что делает счетчик. Полагаю, как статусная строка! –

+0

Возможно, рассмотрите возможность использования всплывающей подсказки вместо отображения функции в строке состояния? – Adamski

+0

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

2

Это предположение, но я подозреваю, что вам необходимо добавить MouseListener в редактор JSpinner (по телефону getEditor()). Я полагаю, что редактор Component занимает все свободное пространство в пределах JSpinner и поэтому перехватывает все MouseEvent s.

+0

Спасибо за ваш ответ. Это то, что вы имеете в виду?senseSpinner.getEditor(). addMouseListener (новый MouseAdapter() {...}) 'Это тоже не работает. Самое смешное, что этот код был сгенерирован с использованием NetBeans и поэтому теоретически должен работать! –

+0

Да, вот что я имел в виду. Фактически, вы можете попробовать добавить слушателя в текстовое поле редактора, вызвав ((JSpinner.DefaultEditor) spinner.getEditor()). GetTextField(). AddMouseListener (...). – Adamski

+0

Нет, такое же бывает. А именно, ничего! –

2

Это сработало для меня.

JSpinner spinner = new JSpinner(); 

((JSpinner.DefaultEditor)spinner.getEditor()).getTextField().addMouseListener(
    new java.awt.event.MouseAdapter() {    
    public void mouseClicked(final MouseEvent e) { 
     // add code here 
    } 
}); 

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

0

Доп к @Rapier ответ ...

Если изменить Spinner, используя что-то вроде

yourOldSpinner = new JSpinner(new SpinnerModel(...)) 

вы потеряли previosly MouseListener ...

Если вам нужно что-то изменить SpinnerModel, Не создавайте новое, вместо этого меняйте его параметры! (если вы это сделаете, вам придется переназначить MouseListener снова, потому что он будет потерян при назначении новой SpinnerModel).

пример (я говорю ...):

((SpinnerNumberModel)yourOldSpinner.getModel()).setValue(size/3); 
((SpinnerNumberModel)yourOldSpinner.getModel()).setMinimum(0); 
((SpinnerNumberModel)yourOldSpinner.getModel()).setMaximum(isize/2); 
((SpinnerNumberModel)yourOldSpinner.getModel()).setStepSize(1); 
Смежные вопросы