我有一个Settings
类,它应该提供检索设置并将其保存到文件的接口。我的设置应该在我更改输入值时更新(而不是在单击"保存"按钮之后)。这就是我将此方法添加到Settings
类的原因:
/** Automatically update setting value as user types.
* @param setting_name What is the name of associated setting?
* @param input JTextComponent (like JTextField) to listen on for events
*/
public void listenOnInput(final String setting_name, final JTextComponent input) {
//Debug output
System.out.println("Settings[""+setting_name+""] automatically updates on input change.");
input.addInputMethodListener(new InputMethodListener() {
@Override
public void inputMethodTextChanged(InputMethodEvent event) {
//Set setting to current value
setSetting(setting_name, input.getText());
}
//This method is dummy, I see no use for it
@Override
public void caretPositionChanged(InputMethodEvent event) {}
});
}
这可能不是一个完美的设计,但我的应用程序永远不会有复杂的设置,因此我不会在这项任务上投入太多精力。我是这样使用的:
JTextField name = new JTextField();
Settings settings = new Settings();
name.setToolTipText("Enter your name");
contentPane.add(name);
settings.listenOnInput("user_name", name);
我的问题是上面的代码不起作用——我可以键入或按Enter,但从未调用inputMethodTextChanged
。
那么,获取更新值的正确方法是什么呢?
在JTextField
的文档上使用DocumentListener
:
textField.getDocument().addDocumentListener(...);
然后,您可以使用它来检测文本中的任何更改。