JavaFX微调单元
问题描述:
我想将单元设置为只接受数字的微调单元。 理想情况下,微调器文本框将显示数字旁边的单位(例如:2500毫秒或125%等)。JavaFX微调单元
有没有办法将格式设置为文本字段?
我认为这很容易,但我找不到方法。
谢谢,扬
答
的微调值工厂有用来将值转换为和显示或在编辑器中输入的文本值converter
。您可以使用此配置如何值显示:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Spinner;
import javafx.scene.control.SpinnerValueFactory;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.util.StringConverter;
public class SpinnerWithUnits extends Application {
@Override
public void start(Stage primaryStage) {
Spinner<Integer> spinner = new Spinner<>();
spinner.setEditable(true);
SpinnerValueFactory.IntegerSpinnerValueFactory valueFactory = new SpinnerValueFactory.IntegerSpinnerValueFactory(0, 10000, 0, 100);
valueFactory.setConverter(new StringConverter<Integer>() {
@Override
public String toString(Integer value) {
return value.toString()+" ms";
}
@Override
public Integer fromString(String string) {
String valueWithoutUnits = string.replaceAll("ms", "").trim();
if (valueWithoutUnits.isEmpty()) {
return 0 ;
} else {
return Integer.valueOf(valueWithoutUnits);
}
}
});
spinner.setValueFactory(valueFactory);
StackPane root = new StackPane(spinner);
primaryStage.setScene(new Scene(root, 400, 400));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
当然,你可能想使用更合适的类型比Integer
为微调的类型:在这种情况下,它可能会更有意义使用Duration
。您仍然可以在(现在是自定义)微调器值工厂上使用转换器,以根据需要显示格式化的值。