我的教授说,为TextFormatter使用过滤器和转换器是“理想的”。我查看了他的例子并尝试了它们,但无法理解为什么我们需要一个转换器。
来自docs:
Formatter通过使用两种不同的机制来描述TextInputControl文本的格式:
可以拦截和修改用户输入的过滤器(getFilter())。这有助于使文本保持所需的格式。默认文本 供应商可用于提供初始文本。
值转换器(getValueConverter())和值(valueProperty())可用于提供特殊格式 表示类型为V的值。如果控件是可编辑的,则为文本 由用户更改,然后更新值以对应 文本。
我很清楚这里缺少的东西。我明白为什么要将字符串转换为整数(用于计算等)。但为什么你必须把它作为TextFormatter的一部分?我们不能只使用getText()然后只是转换文本,因为我们想要有值?
还有一件事:如果我们有一个不允许使用非数字字符的过滤器,那么为什么我们需要使用转换器来处理文本到整数/双倍等的转换?
也许我只是错过了一些非常明显的东西。
答案 0 :(得分:1)
您无法将String
投射到Integer
(或除Object
之外的任何其他类型):您必须转换它。即使文本格式化程序具有仅允许数字输入的过滤器,文本字段的getText()
方法仍然返回字符串,这通常不是很方便(因为文本字段中的条目可能表示数字某些对象中的值。)
您可能需要在许多不同的位置获取由文本字段表示的整数(例如)值,因此您可以通过将转换器作为格式化程序的一部分来将转换代码集中在一个位置。
此外,格式化程序的值是一个可观察的属性,因此您可以轻松地将其他属性绑定到它,等等。如果您需要在文本字段的绑定中执行转换,这将非常棘手。 s text property。