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

标签 java swing user-interface jframe jformattedtextfield

我试图通过字符串变量 title 将输入到“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);

最佳答案

您确定需要使用 JFormattedTextField 还是可以使用带有 DocumentListenerJTextField正如camickr建议的那样?您使用的是什么Formatter

当属性改变时,只有propertyChange()方法中的代码被执行。因此,您必须从该方法更新 artistField。您还应该使用 setValue() 而不是 setText() 更新 JFormattedTectFields,因为 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 需要一个可以处理StringFormatter。这是一个只返回相同字符串的愚蠢格式化程序(如果您不需要 FormatterJTextFieldDocumentListener 是更好的选择):

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/

相关文章:

java - 使用 DataOutputStream 将 int 写入文件

java - 有谁知道 Slick 2D lib 的任何好的教程?

java - 在 Java 中调整图像大小

python - 在 Jython 中使用 JavaCV

iPhone,圆形矩形按钮上半部分和下半部分?

java - ibatis域类应该用作javabean吗?

java - 更改应用程序:layout_constraintHorizontal_bias ="" in the ConstraintLayout

java - GUI多帧切换

java - 调整 JPanel 大小

Android:没有通知图标