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
设计。
Model
(在本例中为 Document
)包含数据。请注意,对于其他 Swing 组件,Model
实际上称为 Model
。例如,您有 TableModel
对应 JTable
或 ListModel
对应 JList
.
- View-Controller 是 JTextField 组件。
View
的工作是绘制 Model
中的数据。
当您向文本字段添加文本时,您实际上是在更新 Model
。 Model
然后通知 View
数据已更改,文本字段已重新绘制。
因此,如果您通过 setText(...)
方法向 Document
添加文本,然后将新的 Document
设置到文本字段,就 View
担心没有文字可画
为什么要使用自定义文档?如果您需要自定义文本字段的行为,通常有更好的选择。
我创建了一个 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
设计。
Model
(在本例中为Document
)包含数据。请注意,对于其他 Swing 组件,Model
实际上称为Model
。例如,您有TableModel
对应JTable
或ListModel
对应JList
.- View-Controller 是 JTextField 组件。
View
的工作是绘制Model
中的数据。
当您向文本字段添加文本时,您实际上是在更新 Model
。 Model
然后通知 View
数据已更改,文本字段已重新绘制。
因此,如果您通过 setText(...)
方法向 Document
添加文本,然后将新的 Document
设置到文本字段,就 View
担心没有文字可画
为什么要使用自定义文档?如果您需要自定义文本字段的行为,通常有更好的选择。