import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Spinner; import javafx.scene.control.SpinnerValueFactory; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.stage.Stage; import java.util.Arrays; public class SpinnerApp extends Application { public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage primaryStage) throws Exception { primaryStage.setScene(new Scene(createContent())); primaryStage.show(); } public Parent createContent() { HBox intBlock = new HBox(30); HBox stringBlock = new HBox(30); HBox doubleBlock = new HBox(30); String[] styles = { "spinner", //默认箭头按钮是垂直居右 Spinner.STYLE_CLASS_ARROWS_ON_RIGHT_HORIZONTAL, Spinner.STYLE_CLASS_ARROWS_ON_LEFT_VERTICAL, Spinner.STYLE_CLASS_ARROWS_ON_LEFT_HORIZONTAL, Spinner.STYLE_CLASS_SPLIT_ARROWS_VERTICAL, Spinner.STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL }; Spinner[] intSpinners = new Spinner[styles.length]; Spinner[] stringSpinners = new Spinner[styles.length]; Spinner[] doubleSpinners = new Spinner[styles.length]; for (int i = 0; i < styles.length; i++) { //Integer Spinner SpinnerValueFactory svf = new SpinnerValueFactory.IntegerSpinnerValueFactory(1, 99); Spinner sp = new Spinner(); sp.setValueFactory(svf);//设置Value Factory sp.getStyleClass().add(styles[i]);//设置箭头按钮的位置样式 sp.setPrefWidth(80); sp.setEditable(true);//设置可编辑 intSpinners[i] = sp; //Double Spinner svf = new SpinnerValueFactory.DoubleSpinnerValueFactory(0.0, 10.0, 0.5, 0.01); sp = new Spinner(); sp.setValueFactory(svf); sp.getStyleClass().add(styles[i]); sp.setPrefWidth(90); doubleSpinners[i] = sp; //String Spinner ObservableList<String> items = FXCollections.observableArrayList("Grace", "Matt", "Katie"); svf = new SpinnerValueFactory.ListSpinnerValueFactory<>(items); sp = new Spinner(); sp.setValueFactory(svf); sp.setPrefWidth(100); sp.getStyleClass().add(styles[i]); if (i % 2 == 0) { sp.getValueFactory().setWrapAround(true);//循环切换:当前进到最后一个值时,再点前进是就显示第一个值 } stringSpinners[i] = sp; } intBlock.getChildren().addAll(Arrays.asList(intSpinners)); doubleBlock.getChildren().addAll(Arrays.asList(doubleSpinners)); stringBlock.getChildren().addAll(Arrays.asList(stringSpinners)); //<editor-fold defaultstate="collapsed" desc="自定义Value Facroty,显示2的X次方,对X进行步进"> SpinnerValueFactory svf = new SpinnerValueFactory<Double>() { int power = 0; @Override public void decrement(int steps) { power--; updateValue(); } @Override public void increment(int steps) { power++; updateValue(); } public void updateValue() { setValue(Math.pow(2, power)); } }; svf.setValue(1); Spinner sp = new Spinner(svf); sp.setPrefWidth(100); //</editor-fold> return new VBox(25, intBlock, doubleBlock, stringBlock, sp); } }
原文:http://blog.csdn.net/alanzyy/article/details/44624327