试图让JFormattedtextfield改变......不工作

时间:2011-12-10 21:25:58

标签: java swing user-interface jframe jformattedtextfield

我正在尝试将输入“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);

3 个答案:

答案 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代码中,您可以获取文本并重置其他变量。