我创建了一个 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 组件在修改后的模型- View - Controller
设计上工作。
模型
(在本例中为文档
)包含数据。请注意,对于其他 Swing 组件,Model
实际上称为Model
。例如,您有一个用于JTable
的TableModel
或一个用于JList
的ListModel
。- View Controller 是 JTextField 组件。
View
的工作是在Model
中绘制数据。
当您向文本字段添加文本时,您实际上是在更新模型
。然后,Model
通知View
数据已更改,并且文本字段已重新绘制。
因此,如果您通过 setText(...)
方法向 Document
添加文本,然后将新的 Document
设置为文本字段,就 View
而言,没有要绘制的文本。
为什么要使用自定义文档?如果您需要自定义文本字段的行为,通常有更好的选择。
关于java - JTextField setDocument 覆盖文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58516585/