我创建了一个JTextField(在创建之后或在构造函数中设置文本)。之后,我在文本字段中添加了一个Document(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
的工作是在Model
中绘制数据。将文本添加到文本字段时,您实际上是在更新Model
。然后,Model
通知View
数据已更改,并且重新绘制了文本字段。
因此,如果通过Document
方法将文本添加到setText(...)
,然后将新的Document
设置为文本字段,就View
而言,没有可绘制的文本。
您为什么使用自定义文档?如果需要自定义文本字段的行为,通常会有更好的选择。