Вызов метода каждый раз, когда текст в JPasswordField изменяется - PullRequest
0 голосов
/ 20 февраля 2012

- EDIT -
У меня есть JTextField, и я хочу, чтобы метод (пусть пока это был просто оператор print) вызывался каждый раз, когда кто-то изменяет (печатает или удаляет) символ в JTextField. Цель этого метода состоит в том, чтобы метод мгновенно проверял, удовлетворяет ли то, что напечатано, определенным условиям. Благодаря вашей помощи мне удалось написать:

public class MyDocumentListener implements DocumentListener {

    public void insertUpdate(DocumentEvent e) {
        updateLog(e, "inserted into");
    }
    public void removeUpdate(DocumentEvent e) {
        updateLog(e, "removed from");
    }
    public void changedUpdate(DocumentEvent e) {
        //Plain text components do not fire these events
    }

    public void updateLog(DocumentEvent e, String action) {
        System.out.println("should call the method here");
    }
}

Код JTextField:

    JTextField passwordField = new JTextField();
    passwordField.getDocument().addDocumentListener(new MyDocumentListener());
    passwordField.getDocument().putProperty("name", "Text Field");

Проблема, которую я получаю сейчас, заключается в том, что мне нужно использовать

String textFieldPassword = passwordField.getText();

но возвращается NullPointerException. Я предполагаю, что это потому, что я добавил DocumentListener и теперь должен работать на DocumentEvent. Но я не знаю, как это сделать.

1 Ответ

2 голосов
/ 20 февраля 2012

Вы хотите прослушиватель действий для поля:

public class YourClass extends JPanel implements ActionListener {

    public void addComponents() {
        ...
        passwordField.addActionListener(this);
        ...
    }

    /**
      will be fired when the password field changes
    */
    public void actionPerformed(ActionEvent evt) {
        String text = passwordField.getText();
        System.out.println("key pressed");
    }
}

Если вам не по вкусу, вы можете попробовать DocumentListener .

...