我试图通过字符串变量 title 将输入到“titleField”中的任何内容设置为出现在“artistField”中
我在 titleField 中输入文本,按回车键,但 artistField 中什么也没有出现
谁能告诉我我做错了什么?
titleField.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e){
Object source = e.getSource();
if (source == titleField) {
title = (String)titleField.getValue();
}
}
});
artistField = new JFormattedTextField();
artistField.setText(title);
最佳答案
您确定需要使用 JFormattedTextField
还是可以使用带有 DocumentListener
的 JTextField
正如camickr建议的那样?您使用的是什么Formatter
?
当属性改变时,只有propertyChange()
方法中的代码被执行。因此,您必须从该方法更新 artistField
。您还应该使用 setValue()
而不是 setText()
更新 JFormattedTectFields
,因为 setText()
仅更新文本而不是实际内容。
试试这个 PropertyChangeListener:
titleField.addPropertyChangeListener("value", new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e){
Object source = e.getSource();
if (source == titleField) {
String title = (String)titleField.getValue();
artistField.setValue(title);
}
}
});
您的JFormattedTextField
需要一个可以处理String
的Formatter
。这是一个只返回相同字符串的愚蠢格式化程序(如果您不需要 Formatter
,JTextField
和 DocumentListener
是更好的选择):
class StringFormatter extends AbstractFormatter {
@Override
public Object stringToValue(String text) throws ParseException {
return text;
}
@Override
public String valueToString(Object value) throws ParseException {
return (String)value;
}
}
在初始化 JFormattedTextField
时使用它,例如:
JFormattedTextField titleField = new JFormattedTextField(new StringFormatter());
关于java - 试图让 JFormattedtextfield 改变......不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8459999/