Новый runnable вызывает тот же слушатель, который был вызван с пустым JTextField - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь осуществить изменение кредитной карты JTextField.Всякий раз, когда пользователь вводит цифры, прикрепленный к нему слушатель проверяет, нужно ли ему добавлять "-" между каждыми 4 цифрами.

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

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

После этого я попытался удалить слушателя из объекта Runnableи добавить его после того, как я установил JTextField.

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        System.out.println(txtNumber.getText());                      
        txtNumber.getDocument().removeDocumentListener(Main.getM_PaymentPanel());
        txtNumber.setText(String.format("%s-",txtNumber.getText()));                     
        txtNumber.getDocument().addDocumentListener(Main.getM_PaymentPanel());
    }
});

Есть ли другой способ сделать это, вместо удаления слушателя, а затем добавить его снова?

Заранее спасибо!:)

...