JTextField setDocument 覆盖文本

JTextField setDocument overwrites text

我创建了一个 JTextField(在创建后或在构造函数中设置文本)。之后我在文本域中添加了一个文档(setDocument),想知道为什么 JTextField 的文本值为空。

示例:

JTextField field = new JTextField();
field.setText(textValue); // or instead setting the text in the constructor
field.setDocument(new TestDocument());
// text is no empty

在文本之前设置文档完全解决了这个问题。我只是想知道为什么会这样。是不是之前设置的文本没有按照文档处理?

Swing 组件适用于修改后的 Model-View-Controller 设计。

  1. Model(在本例中为 Document)包含数据。请注意,对于其他 Swing 组件,Model 实际上称为 Model。例如,您有 TableModel 对应 JTableListModel 对应 JList.
  2. View-Controller 是 JTextField 组件。 View 的工作是绘制 Model 中的数据。

当您向文本字段添加文本时,您实际上是在更新 ModelModel 然后通知 View 数据已更改,文本字段已重新绘制。

因此,如果您通过 setText(...) 方法向 Document 添加文本,然后将新的 Document 设置到文本字段,就 View担心没有文字可画

为什么要使用自定义文档?如果您需要自定义文本字段的行为,通常有更好的选择。