Java 只读JFormattedTextField

Java 只读JFormattedTextField,java,swing,jformattedtextfield,Java,Swing,Jformattedtextfield,既然JFormattedTextField已启用并包含格式化程序,是否有办法使其成为只读?对于JTextField,我们只需要提供一个自定义文档并在那里执行所有的控制,但是对于JFormattedTextField,我认为事情要复杂一些,因为我们不想弄乱它的文档过滤器。我真的需要这个功能。那么,有没有办法做到这一点 更新:这只是我的观点,但从这个意义上讲,JFormattedTextField的设计似乎太糟糕了,以至于没有简单的解决方案 Marcos您不能通过将IsEdit设置为false来禁用

既然JFormattedTextField已启用并包含格式化程序,是否有办法使其成为只读?对于JTextField,我们只需要提供一个自定义文档并在那里执行所有的控制,但是对于JFormattedTextField,我认为事情要复杂一些,因为我们不想弄乱它的文档过滤器。我真的需要这个功能。那么,有没有办法做到这一点

更新:这只是我的观点,但从这个意义上讲,JFormattedTextField的设计似乎太糟糕了,以至于没有简单的解决方案


Marcos

您不能通过将IsEdit设置为false来禁用编辑吗

您只需使用:

JFormattedTextField field = new JFormattedTextField();
// ...
field.setEditable(false);
就像对于
JTextField
一样,因为
JFormattedTextField
扩展了
JTextField


也请查看。撤消每次发生的更改如何:

JFormattedTextField formattedTextField = new JFormattedTextField("Can't touch this! :)");
formattedTextField.getDocument().addUndoableEditListener(new UndoableEditListener() {
    @Override
    public void undoableEditHappened(UndoableEditEvent e) {
        e.getEdit().undo();
    }
});

我希望它能同时聚焦。@Marcos一个不能阻止另一个。您仍然可以聚焦文本字段,并使用快捷键(如CTRL+A或SHIFT+箭头)修改选择。是的,我现在看到了它,但它看起来很奇怪,因为我们在进入字段时没有看到插入符号光标。因此,有一段时间,它让人感觉字段不是焦点所有者。@Marcos当文本字段不可编辑时,其插入符号会自动隐藏。但是,没有什么可以阻止您添加一个
FocusListener
,并在获得焦点时使其可见,在失去焦点时使其不可见:
textfield.getCaret().setVisible(true)