этот вопрос меня озадачивал уже несколько дней, и я чувствую, что едва смог его сузить.
Я использую Java и у меня есть мастер, чтобы пользователь мог пройти через него. Один из шагов позволяет пользователю выбрать время и дату начала и время и дату окончания, чтобы запланировать некоторую работу. Я думал, что у меня есть проверка на завершенные даты (так что дата окончания должна быть после даты начала, а дата начала должна быть после текущей даты и т. Д.). Однако мой метод проверки срабатывает только после потери фокуса на любой дате TextField, поэтому, если пользователь выбрал новую дату и сразу щелкнул следующий, неправильный выбор может быть продолжен - ошибка!
Селекторы начальной и конечной даты - это виджеты, которые состоят из JSpinner и диалогового окна календаря, которое появляется при нажатии кнопки. Я прикрепил слушатель документа к текстовому полю JSpinner:
DocumentListener docListener = new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
dateChanged();
System.out.println("insertUpdate");
}
@Override
public void removeUpdate(DocumentEvent e) {
dateChanged();
System.out.println("removeUpdate");
}
@Override
public void changedUpdate(DocumentEvent e) {
dateChanged();
System.out.println("changedUpdate");
}
};
((JSpinner.DefaultEditor) jSpinner1.getEditor()).getTextField().getDocument().addDocumentListener(
docListener);
Когда я запускаю этот класс, используя собственный метод main для проверки:
public static void main(String[] args) {
DateSelectorWidget test = new DateSelectorWidget();
JFrame f = new JFrame("T E S T ");
f.getContentPane().setLayout(new BorderLayout());
f.getContentPane().add(test, BorderLayout.CENTER);
f.pack();
f.setVisible(true);
}
DocListener срабатывает каждый раз, и все в порядке. Однако этот класс является частью более крупной программы, и когда он вызывается в нем - DocListener просто не запускается вообще. Экземпляр класса просто добавляется на панель в мастере, но он не работает так, как при независимом тестировании.
Есть идеи у кого-нибудь?
Спасибо