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。您仍然可以在(现在是自定义)微调器值工厂上使用转换器,以根据需要显示格式化的值。