我试图通过将其传递给字符串变量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需要可以处理FormatterString。这是一个愚蠢的格式化程序,它仅返回相同的String(如果不需要JTextField,则DocumentListenerFormatter是更好的选择):
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/

10-10 20:10