我正在尝试将输入“titleField”的内容设置为“artistField”,方法是将其传递给字符串变量title
我在titleField中键入文本,按回车键,artField
中没有任何内容有人可以告诉我我做错了吗?
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);
答案 0 :(得分:2)
您确定需要使用JFormattedTextField
,还是可以使用JTextField
DocumentListener
作为camickr建议?您使用的是哪个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
。这是一个简单的格式化程序,只返回相同的字符串(A 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());
答案 1 :(得分:1)
尝试在getValue之前调用commitEdit。查看Java Doc here。
答案 2 :(得分:1)
我在titleField中键入文本,按回车键,artField
中没有任何内容
如果您的要求是在按下Enter
时进行一些处理,那么您应该使用ActionListener。 ActionListion可以添加到JFormattedTextField或JTextField。然后在ActionLIstener代码中,您可以获取文本并重置其他变量。