Java MouseEvents не работает - PullRequest
       33

Java MouseEvents не работает

3 голосов
/ 31 марта 2010

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

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

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?Заранее спасибо.

РЕДАКТИРОВАТЬ: MouseEntered отлично работает на JCheckBox реализован точно так же!

Ответы [ 4 ]

3 голосов
/ 31 марта 2010

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

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

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

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

Стеклянное стекло с хорошим поведением от Александра Поточкина - хорошее место для начала.

2 голосов
/ 07 октября 2011

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

JSpinner spinner = new JSpinner();

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

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

2 голосов
/ 31 марта 2010

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

0 голосов
/ 30 июня 2016

Дополнительно к ответу @Rapier ...

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

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

Вы потеряете свой предыдущий 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);
...