我试图通过将其传递给字符串变量title来设置输入到“titleField”中的任何内容,以使其出现在“artistField”中
我在titleField中输入文字,然后按Enter,而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
还是可以使用camickr建议的带有 JTextField
的DocumentListener
?您正在使用什么Formatter
?
更改属性后,只会执行propertyChange()
方法中的代码。因此,您必须从该方法更新artistField
。您还应该使用JFormattedTectFields
而不是setValue()
更新setText()
,因为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
需要可以处理Formatter
的String
。这是一个愚蠢的格式化程序,它仅返回相同的String(如果不需要JTextField
,则DocumentListener
和Formatter
是更好的选择):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/