3

我正在尝试通过字符串变量标题将输入到“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);
4

3 回答 3

2

您确定需要使用 a还是JFormattedTextField可以按照 camickr 的建议使用 a ?你在用什么?JTextFieldDocumentListenerFormatter

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 , AJTextField和 a是更好的选择):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());
于 2011-12-10T21:49:14.770 回答
1

我在titleField中输入文本,按回车,在artistField中什么也没有出现

如果您的要求是在按下时进行一些处理Enter,那么您应该使用 ActionListener。可以将 ActionListion 添加到 JFormattedTextField 或 JTextField。然后在 ActionLIsener 代码中,您可以获得文本并重置您的其他变量。

于 2011-12-10T22:31:00.930 回答
1

尝试在 getValue 之前调用 commitEdit。在此处查看 Java 文档。

于 2011-12-10T21:29:57.267 回答