使用简单日期格式
已经有一个类专为格式化日期而设计,您可以将其与TextField's textFormatter: SimpleDateFormat
TextField tf = new TextField();
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
tf.setTextFormatter(new TextFormatter<>(new DateTimeStringConverter(format), format.parse("00:00:00")));
请参阅 javadocSimpleDateFormat有关字符含义的更详细描述。
使用 3 个不同的文本字段
您还可以使用 3 种不同的TextField
s 并删除背景和边框并将它们放入HBox
获得不可编辑的:
s:
TextField hours = new TextField();
TextField minutes = new TextField();
TextField seconds = new TextField();
StringConverter<Integer> minSecConverter = new IntRangeStringConverter(0, 59);
minutes.setTextFormatter(new TextFormatter<>(minSecConverter, 0));
seconds.setTextFormatter(new TextFormatter<>(minSecConverter, 0));
hours.setTextFormatter(new TextFormatter<>(new IntRangeStringConverter(0, 23), 0));
prepareTextField(hours);
prepareTextField(minutes);
prepareTextField(seconds);
HBox fields = new HBox(hours, createLabel(),minutes, createLabel(), seconds);
fields.setPadding(new Insets(4));
fields.setStyle("-fx-background-color: white;");
public static void prepareTextField(TextField tf) {
tf.setAlignment(Pos.CENTER);
tf.setBackground(Background.EMPTY);
tf.setBorder(Border.EMPTY);
tf.setPadding(Insets.EMPTY);
tf.setPrefColumnCount(2);
}
public static class IntRangeStringConverter extends StringConverter<Integer> {
private final int min;
private final int max;
public IntRangeStringConverter(int min, int max) {
this.min = min;
this.max = max;
}
@Override
public String toString(Integer object) {
return String.format("%02d", object);
}
@Override
public Integer fromString(String string) {
int integer = Integer.parseInt(string);
if (integer > max || integer < min) {
throw new IllegalArgumentException();
}
return integer;
}
}
public static Label createLabel() {
Label label = new Label(":");
label.setPrefWidth(3);
return label;
}