如何将 TextFormatter 附加到 TextField?
How do you attach a TextFormatter to a TextField?
我正在做一个简单的分数 sheet,我正处于让用户创建自定义 sheet 的阶段。显然,我不希望他们随便输入任何整数,所以我试图将我创建的 UnararyOperator 连接到 TextField,但我不确定如何按照我的 JavaFX 项目设置的方式进行操作。
public class MainMenuCtrl {
@FXML
private TextField playsFld;
@FXML
void initialize() {
UnaryOperator<TextFormatter.Change> playsValidator = change -> {
if (change.getText().matches("\d{1,2,3,4,5,6}")){
return change;
} else {
change.setText("");
change.setRange(change.getRangeStart(), change.getRangeEnd());
return change;
}
};
}
}
事实证明正则表达式很奇怪而且文档似乎并不总是正确的。玩了一下之后我发现:
"(0*(?:[1-9]?)|10)"
表示 1-10,但只有 1 位数字,除非它特别是 10
"^[1-6]?$"
表示1-6且只有1位数字
"(0*(?:[1-9][0-9]?)|100)"
表示 1-100 最多 3 位,但百位只有 1
*0 匹配前面的字符 0 次。我很确定这就是您锁定位数的方式
?: 表示前面的字符可能不会出现在字符串中。我认为这样就不需要 01.
[n-n] 是搜索的字符。我很确定上面的 [1-9][0-9] 是十位的 1-9 和十位的 0-9。所以你可以为每个地方添加括号。
|用于匹配任何一个元素。所以|100就是精确匹配100。
$是告诉电脑你必须在结束前匹配。
我正在做一个简单的分数 sheet,我正处于让用户创建自定义 sheet 的阶段。显然,我不希望他们随便输入任何整数,所以我试图将我创建的 UnararyOperator 连接到 TextField,但我不确定如何按照我的 JavaFX 项目设置的方式进行操作。
public class MainMenuCtrl {
@FXML
private TextField playsFld;
@FXML
void initialize() {
UnaryOperator<TextFormatter.Change> playsValidator = change -> {
if (change.getText().matches("\d{1,2,3,4,5,6}")){
return change;
} else {
change.setText("");
change.setRange(change.getRangeStart(), change.getRangeEnd());
return change;
}
};
}
}
事实证明正则表达式很奇怪而且文档似乎并不总是正确的。玩了一下之后我发现:
"(0*(?:[1-9]?)|10)"
表示 1-10,但只有 1 位数字,除非它特别是 10
"^[1-6]?$"
表示1-6且只有1位数字
"(0*(?:[1-9][0-9]?)|100)"
表示 1-100 最多 3 位,但百位只有 1
*0 匹配前面的字符 0 次。我很确定这就是您锁定位数的方式
?: 表示前面的字符可能不会出现在字符串中。我认为这样就不需要 01.
[n-n] 是搜索的字符。我很确定上面的 [1-9][0-9] 是十位的 1-9 和十位的 0-9。所以你可以为每个地方添加括号。
|用于匹配任何一个元素。所以|100就是精确匹配100。
$是告诉电脑你必须在结束前匹配。