Java 只读JFormattedTextField
既然JFormattedTextField已启用并包含格式化程序,是否有办法使其成为只读?对于JTextField,我们只需要提供一个自定义文档并在那里执行所有的控制,但是对于JFormattedTextField,我认为事情要复杂一些,因为我们不想弄乱它的文档过滤器。我真的需要这个功能。那么,有没有办法做到这一点 更新:这只是我的观点,但从这个意义上讲,JFormattedTextField的设计似乎太糟糕了,以至于没有简单的解决方案Java 只读JFormattedTextField,java,swing,jformattedtextfield,Java,Swing,Jformattedtextfield,既然JFormattedTextField已启用并包含格式化程序,是否有办法使其成为只读?对于JTextField,我们只需要提供一个自定义文档并在那里执行所有的控制,但是对于JFormattedTextField,我认为事情要复杂一些,因为我们不想弄乱它的文档过滤器。我真的需要这个功能。那么,有没有办法做到这一点 更新:这只是我的观点,但从这个意义上讲,JFormattedTextField的设计似乎太糟糕了,以至于没有简单的解决方案 Marcos您不能通过将IsEdit设置为false来禁用
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)正如我所说,我也希望它是可聚焦的。没有明显原因的额外工作。如果其中一个失败怎么办?然而,如果将editable设置为false,则无法获取异常。这一个将保留插入符号。