java - JTextField setDocument 覆盖文本

标签 java swing jtextfield

我创建了一个 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 设计上工作。

  1. 模型(在本例中为文档)包含数据。请注意,对于其他 Swing 组件,Model 实际上称为 Model。例如,您有一个用于 JTableTableModel 或一个用于 JListListModel
  2. View Controller 是 JTextField 组件。 View 的工作是在 Model 中绘制数据。

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

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

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

关于java - JTextField setDocument 覆盖文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58516585/

相关文章:

java - response.sendRedirect 在 Spring MVC RequestMethod.DELETE 中不起作用

java - 使用 Java Swing 组件时无法使用正则表达式验证 JTextField 的值

java - 取消对所有 JTextField 的关注

java - 将文本字段输入转换为整数时出现 NumberFormatException

java - Tomcat 服务器 "Commons Daemon Service Manager"命令提示符

java - 使用 float 操作按钮时出现致命异常

java - 从 String 中获取数据并填充 RecyclerView

java - 根据 JComboBox 中的第一项显示项目

java - 如何处理不同的屏幕尺寸

java - 尝试创建一个带有 2D vector 和字符串数组头的 JTable,我该怎么做?