如何格式化JFXTextField以在每两个字符上添加空格?

时间:2017-08-12 21:37:52

标签: javafx formatting textfield jfoenix

您好我正在尝试为我的文本域添加空间格式(我使用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());
      });
}

用于测试我在这里面临的问题是:大量空间和写作是相反的

感谢Armel Sahamene回答我们已经修复了间距问题,但没有解决间隔问题

123456应该是12 34 56但结果是65 43 21

感谢

2 个答案:

答案 0 :(得分:1)

您的格式取决于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());
  });

}

答案 1 :(得分:1)

可能的解决方案已经得到解答here

对于您的情况,我建议使用MaskField