При попытке узнать события JButton я запутался из-за проблемы. Пример кода, который я использую, - here.Проблема Java Swing, почему changeEvent запускает дополнительные события с помощью jButton?
код ниже:
jb.addChangeListener(new ChangeListener()
{
@Override
public void stateChanged(ChangeEvent e)
{
System.out.println("Changed");
}
});
Это демо-приложение, поэтому используется только одна кнопка, и она имеет фокус, когда приложение запускается. Я просто нажимаю клавишу пробела, чтобы имитировать событие щелчка. Согласно учебнику (OReilly: Java Swing), он должен запустить событие изменения дважды, за которым следует событие действия, за которым следует событие действия. т.е.
- Изменено
- Изменено
- ActionEvent
- Изменено
Но после 4-го мероприятия я получил еще ChangeEvent. На самом деле существует 5 событий за один клик, как указано выше. Если я пытаюсь щелкнуть мышью, результат будет еще более разным. Когда мышь входила в область кнопки, событие срабатывало.
Я не знаю, какие изменения происходят, и ChangeEvent поднимается, когда мышь нависает над JButton. Я не нашел аналогичный метод, например getChangedState (ItemStageChanged) для JButton, чтобы узнать, какое состояние было изменено в этой кнопке. Поскольку речь идет об обучении, я не хочу использовать ActionListener, если я не понимаю эту проблему.
Так что мои вопросы:
- Почему я вижу ChangeEvent дважды, где он должен быть один?
- Как узнать, какое состояние изменилось в JButton?
Редактировать: Я вижу, что в DefaultButtonModel есть 5 состояний, и они определены в интерфейсе ButtonModel. Но у JButton нет полей, методов для получения этих состояний. они охотно игнорировались? Или JButton (и AbstractButton) не связаны с интерфейсом ButtonModel.
Edit 2: Учебное пособие показывает,
В зависимости от L & F, также могут быть дополнительные ChangeEvents.
Я использую значение Swing по умолчанию L & F в Windows, но я получаю разные результаты, кроме ожиданий учебника.
Вы пытаетесь узнать, как использовать 'JButton' или как использовать' ChangeListener'? Я спрашиваю, потому что все время я кодировал Java, я никогда не нашел причины добавлять кнопку «ChangeListener» к кнопке. «ActionListener» - это обычный способ пойти. –
Изучая главу JButton, я получил это. Однако я не хочу игнорировать его **, даже если он не используется ** много. – Jones
Согласитесь с Андреем. В любом случае я бы начал с учебников Swing для объяснения/примеров в [Как написать слушателя] (http://docs.oracle.com/javase/tutorial/uiswing/events/handling.html). В вашем случае вы получаете одно событие, когда выбрана кнопка, и одно событие, когда оно не выбрано. – camickr