2017-08-12 2 views
0

こんにちは、私は私の目標はここに2文字ごとに空白を追加するようにJFXTextFieldをフォーマットするにはどうすればよいですか?

1 00 00 00として 10 00 00として 1000001000000を書くことです(私はJFoenixを使用してM)私のテキストフィールドにスペース整形のfonctionalityを追加しようとしているMは私の試みですが、キャレットがあるので、私の結果は逆であります位置を失う。テストのための

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()); 
     }); 
} 

私はここに直面mは問題がある:多くのスペースと書き込みに我々は間隔の問題は、固定していタルメルSahameneの答えに

感謝を逆転させたが、1つの

を逆転されていません123456は、12 34 56であるべきであるが、結果は、あなたのフォーマットがnoSpaced文字列の長さに依存して65の43 21

おかげ

答えて

1

可能な解決策は、すでにhereに答えています。

あなたの場合、MaskFieldを使用することをお勧めします。

+0

Jfoenixのマスクフィールドを使用していますが、望ましいソリューションではありません –

1

あります。したがって、このようなあなたの場合の条件を修正:

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()); 
    }); 

}

+0

ここに問題がありますが、それでもフォーマットが逆になる問題があります。 123987と書いてみると、12 39 87になりますが、78 93 21これを解決するにはどうすればいいですか?知っているのは、キャレットポジションのためです。 –

関連する問題