JTextField setDocument覆盖文本

问题描述 投票:0回答:1

我创建了一个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

在文本之前完全设置文档即可解决此问题。我只是想知道为什么会这样。是否因为未根据文档处理先前设置的文本?

java swing jtextfield
1个回答
0
投票

Swing组件在经过修改的Model-View-Controller设计上工作。

  1. Model(在这种情况下为Document)包含数据。注意,对于其他Swing组件,Model实际上称为Model。例如,对于TableModel,您有一个JTable;对于ListModel,您有一个JList
  2. 视图控制器是JTextField组件。 View的工作是在Model中绘制数据。

将文本添加到文本字段时,您实际上是在更新Model。然后,Model通知View数据已更改,并且重新绘制了文本字段。

因此,如果通过Document方法将文本添加到setText(...),然后将新的Document设置为文本字段,就View而言,没有可绘制的文本。

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

© www.soinside.com 2019 - 2024. All rights reserved.