Слушатель документов срабатывает несколько раз, но не другие - PullRequest
0 голосов
/ 12 октября 2010

этот вопрос меня озадачивал уже несколько дней, и я чувствую, что едва смог его сузить.

Я использую 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 просто не запускается вообще. Экземпляр класса просто добавляется на панель в мастере, но он не работает так, как при независимом тестировании.

Есть идеи у кого-нибудь?

Спасибо

1 Ответ

1 голос
/ 12 октября 2010

Я предполагаю, что вы прямо или косвенно меняете редактор на JSpinner после вашей строки, чтобы получить, привести, получить компонент, получить модель и добавить слушателя.

...