如何格式化 JFXTextField 以在每两个字符上添加空格?
How to format JFXTextField to add spaces on every two characters?
您好,我正在尝试向我的文本字段添加 space 格式化功能(我正在使用 JFoenix),我的目标是将 100000
写为 10 00 00
和 1000000
作为 1 00 00 00
这是我的尝试,但我的结果是相反的,因为插入符号失去了位置。
public static void setup(JFXTextField textField) {
textField.setOnKeyReleased(value->{
String entredText = textField.getText();
String noSpaced = entredText.replaceAll("\s+","");
StringBuilder builder = new StringBuilder();
for (int i = 0; i < noSpaced.length(); i++) {
builder.append(noSpaced.charAt(i));
if (i%2==0) {
builder.append(" ");
}
}
textField.setText(builder.toString());
});
}
为了测试,我在这里面临的问题是:太多 spaces 并且书写颠倒了
感谢 Armel Sahamene 的回答,我们解决了间距问题,但没有解决反转问题
123456 应该是 12 34 56 但结果是 65 43 21
谢谢
您的格式取决于 noSpaced 字符串的长度。所以像这样修复你的 if 条件:
public static void setup(JFXTextField textField) {
textField.setOnKeyReleased(value->{
String entredText = textField.getText();
String noSpaced = entredText.replaceAll("\s+","");
StringBuilder builder = new StringBuilder();
for (int i = 0; i < noSpaced.length(); i++) {
builder.append(noSpaced.charAt(i));
if ((i % 2 == 0 && noSpaced.length() % 2 == 1) || (i % 2 == 1 && noSpaced.length() % 2 == 0)) {
builder.append(" ");
}
}
textField.setText(builder.toString());
});
}
可能的解决方案已经回答here。
对于你的情况,我建议使用 MaskField。
您好,我正在尝试向我的文本字段添加 space 格式化功能(我正在使用 JFoenix),我的目标是将 100000
写为 10 00 00
和 1000000
作为 1 00 00 00
这是我的尝试,但我的结果是相反的,因为插入符号失去了位置。
public static void setup(JFXTextField textField) {
textField.setOnKeyReleased(value->{
String entredText = textField.getText();
String noSpaced = entredText.replaceAll("\s+","");
StringBuilder builder = new StringBuilder();
for (int i = 0; i < noSpaced.length(); i++) {
builder.append(noSpaced.charAt(i));
if (i%2==0) {
builder.append(" ");
}
}
textField.setText(builder.toString());
});
}
为了测试,我在这里面临的问题是:太多 spaces 并且书写颠倒了
感谢 Armel Sahamene 的回答,我们解决了间距问题,但没有解决反转问题
123456 应该是 12 34 56 但结果是 65 43 21
谢谢
您的格式取决于 noSpaced 字符串的长度。所以像这样修复你的 if 条件:
public static void setup(JFXTextField textField) {
textField.setOnKeyReleased(value->{
String entredText = textField.getText();
String noSpaced = entredText.replaceAll("\s+","");
StringBuilder builder = new StringBuilder();
for (int i = 0; i < noSpaced.length(); i++) {
builder.append(noSpaced.charAt(i));
if ((i % 2 == 0 && noSpaced.length() % 2 == 1) || (i % 2 == 1 && noSpaced.length() % 2 == 0)) {
builder.append(" ");
}
}
textField.setText(builder.toString());
});
}
可能的解决方案已经回答here。
对于你的情况,我建议使用 MaskField。