Я создал простую программу javafx.Я хочу разделить цифры три на три при вводе цифр в текстовый файл.Я использовал два решения, которые даны в ссылках на stackoverflow ( Как отформатировать текст TextField? JavaFX , Java 8 U40 TextFormatter (JavaFX), чтобы ограничить пользовательский ввод только для десятичного числа )
но никто из них не работает для меня.первое решение (set textformatter) было для меня бесполезным (или, может быть, я не мог правильно с ним работать), но второе работало, но принимало только 4 цифры, а остальные цифры, которые я вводил в текстовое поле, были втот же стиль, в котором я вводил их без запятой.
Я хочу разделить каждые три цифры следующим образом: 12 564 546 554, если кто-нибудь знает решение, пожалуйста, помогите мне преодолеть эту проблему.спасибо.
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import java.text.DecimalFormat;
import java.text.ParsePosition;
public class DelimiterExample extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
TextField textField = new TextField();
HBox hBox = new HBox();
//solution one
DecimalFormat format = new DecimalFormat( "#,###" );
textField.setTextFormatter( new TextFormatter<>(c ->
{
if ( c.getControlNewText().isEmpty() )
{
return c;
}
ParsePosition parsePosition = new ParsePosition( 0 );
Object object = format.parse( c.getControlNewText(), parsePosition );
if ( object == null || parsePosition.getIndex() < c.getControlNewText().length() )
{
return null;
}
else
{
return c;
}
}));
// solution two
textField.textProperty().addListener((obs , oldVal , newVal)-> {
if (newVal.matches("\\d*")) {
DecimalFormat formatter = new DecimalFormat("#,###");
String newvalstr = formatter.format(Float.parseFloat(newVal));
//System.out.println(newvalstr);
textField.setText(newvalstr);
}
});
hBox.getChildren().add(textField);
Scene scene = new Scene(hBox , 100 , 100);
primaryStage.setScene(scene);
primaryStage.show();
}
}