下面列出了javafx.scene.control.Spinner#setValueFactory ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private Spinner<Object> createListSpinner() {
Spinner<Object> spinner = new Spinner<>();
spinner.setId("list-spinner");
List<Object> names = new ArrayList<Object>();
names.add("January");
names.add("February");
names.add("March");
names.add("April");
names.add("May");
names.add("June");
names.add("July");
names.add("August");
names.add("September");
names.add("October");
names.add("November");
names.add("December");
spinner.setValueFactory(new SpinnerValueFactory.ListSpinnerValueFactory<Object>(FXCollections.observableArrayList(names)));
return spinner;
}
public static void configureSpinner(Spinner<Integer> spinner, IntegerProperty referenceProperty, int minValue, int maxValue) {
spinner.setEditable(true);
spinner.setTooltip(TooltipCreator.createFrom("Max value: " + maxValue));
spinner.setValueFactory(new SpinnerValueFactory.IntegerSpinnerValueFactory(minValue,
Integer.MAX_VALUE,
referenceProperty.get()));
GuiUtils.configureTextFieldToAcceptOnlyValidData(spinner.getEditor(),
stringConsumer(referenceProperty),
validationFunc(maxValue));
configureTextFieldToAcceptOnlyDecimalValues(spinner.getEditor());
}
private Spinner<Double> createDoubleSpinner() {
Spinner<Double> spinner = new Spinner<Double>();
spinner.setId("double-spinner");
spinner.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(25.50, 50.50));
spinner.setEditable(true);
return spinner;
}
@Override
public void start(final Stage stage)
{
final Label label = new Label("Demo:");
SpinnerValueFactory<Double> svf = new SpinnerValueFactory.DoubleSpinnerValueFactory(0, 1000);
Spinner<Double> spinner = new Spinner<>();
spinner.setValueFactory(svf);
spinner.editorProperty().getValue().setStyle("-fx-text-fill:" + "black");
spinner.editorProperty().getValue().setBackground(
new Background(new BackgroundFill(Color.AZURE, CornerRadii.EMPTY, Insets.EMPTY)));
//spinner.getStyleClass().add(Spinner.STYLE_CLASS_ARROWS_ON_LEFT_VERTICAL);
//int x = spinner.getStyleClass().indexOf(Spinner.STYLE_CLASS_ARROWS_ON_LEFT_VERTICAL);
//if (x > 0) spinner.getStyleClass().remove(x);
spinner.setEditable(true);
spinner.setPrefWidth(80);
spinner.valueProperty().addListener((prop, old, value) ->
{
System.out.println("Value: " + value);
});
final HBox root = new HBox(label, spinner);
final Scene scene = new Scene(root, 800, 700);
stage.setScene(scene);
stage.setTitle("Spinner Demo");
stage.show();
}
private static Spinner<Integer> createSpinner(final int max, final Spinner<Integer> next)
{
final Spinner<Integer> spinner = new Spinner<>(0, max, 0);
spinner.getStyleClass().add(Spinner.STYLE_CLASS_SPLIT_ARROWS_VERTICAL);
spinner.setEditable(true);
spinner.setValueFactory(new WraparoundValueFactory(0, max, next == null ? null : next.getValueFactory()));
spinner.getValueFactory().setConverter(WraparoundValueFactory.TwoDigitStringConverter);
spinner.setPrefWidth(45);
return spinner;
}
private static Spinner<Integer> createSpinner(final int max, final Spinner<Integer> next)
{
final Spinner<Integer> spinner = new Spinner<>(0, max, 0);
spinner.setEditable(true);
spinner.setValueFactory(new WraparoundValueFactory(0, max, next == null ? null : next.getValueFactory()));
spinner.getValueFactory().setConverter(WraparoundValueFactory.TwoDigitStringConverter);
spinner.getValueFactory().setValue(0);
spinner.setPrefWidth(65);
return spinner;
}
private Spinner<Integer> createIntegerSpinner() {
Spinner<Integer> spinner = new Spinner<>();
spinner.setId("integer-spinner");
spinner.setValueFactory(new SpinnerValueFactory.IntegerSpinnerValueFactory(0, 50));
return spinner;
}
@Override
protected final Spinner<String> createJFXNode() throws Exception
{
final Spinner<String> spinner = new Spinner<>();
spinner.setValueFactory(createSVF());
styleChanged(null, null, null);
spinner.setMinSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE);
spinner.focusedProperty().addListener((property, oldval, newval)->
{
if (!spinner.isFocused())
restore();
active = false;
});
spinner.getEditor().setOnKeyPressed((final KeyEvent event) ->
{
switch (event.getCode())
{
case ESCAPE: //TODO: fix: escape key event not sensed
// Revert original value, leave active state
restore();
active = false;
break;
case ENTER:
// Submit value, leave active state
submit();
active = false;
break;
//incrementing by keyboard
case UP:
case PAGE_UP:
if (!active)
jfx_node.getValueFactory().increment(1);
break;
case DOWN:
case PAGE_DOWN:
if (!active)
jfx_node.getValueFactory().decrement(1);
break;
default:
// Any other key results in active state
active = true;
}
});
// Disable the contemporary triggering of a value change and of the
// opening of contextual menu when right-clicking on the spinner's
// buttons.
spinner.addEventFilter(MouseEvent.ANY, e ->
{
if (e.getButton() == MouseButton.SECONDARY)
e.consume();
});
// This code manages layout,
// because otherwise for example border changes would trigger
// expensive Node.notifyParentOfBoundsChange() recursing up the scene graph
spinner.setManaged(false);
return spinner;
}