【发布时间】:2012-02-19 23:26:26
【问题描述】:
--编辑--
我有一个 JTextField,我希望每次有人更改(键入或删除)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 上运行。但我真的不知道该怎么做。
【问题讨论】:
-
只需获取 Document 并向其添加 DocumentListener。不要使用 KeyListener,因为你不应该在 Swing 中使用它,它不会响应复制/粘贴操作。
-
对。一个简单的问题:我可以使用
passwordField.getText();并将其视为String吗? -
不,不应该这样做。该方法已被弃用,因为您永远不想将密码视为字符串,因为字符串可能会持续存在,从而使您的密码易受攻击。最好将其视为字符数组。
-
“想要一个方法……在每次有人改变……一个字符时被调用” 为什么?什么方法?
-
立即检查输入的内容是否满足特定条件的方法。
标签: java swing jpasswordfield