下面列出了怎么用javafx.scene.control.Spinner的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
rootPane.setVisible(false);
/*
Initializes the controller class.
*/ /**
* Initializes the controller class.
*/
SpinnerValueFactory<Integer> valueFactoryFrom = new SpinnerValueFactory.IntegerSpinnerValueFactory(1, 100, 1);
SpinnerValueFactory<Integer> valueFactoryUntil = new SpinnerValueFactory.IntegerSpinnerValueFactory(1, 100, 1);
fromLevel.setValueFactory(valueFactoryFrom);
fromLevel.setStyle(Spinner.STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL);
untilLevel.setValueFactory(valueFactoryUntil);
untilLevel.setStyle(Spinner.STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL);
fromLevel.setEditable(true);
untilLevel.setEditable(true);
Util.addIntegerLimiterToIntegerSpinner(fromLevel, valueFactoryFrom);
Util.addIntegerLimiterToIntegerSpinner(untilLevel, valueFactoryUntil);
valueFactoryFrom.valueProperty().addListener((arg0, arg1, arg2) -> groupSliderChange(fromLevel.getValue(),0));
valueFactoryUntil.valueProperty().addListener((arg0, arg1, arg2) -> groupSliderChange(untilLevel.getValue(),1));
}
private void setFormConstraints(Node field) {
if (field instanceof ISetConstraints) {
((ISetConstraints) field).setFormConstraints(this);
} else if (field instanceof Button) {
_setFormConstraints((Button) field);
} else if (field instanceof TextField) {
_setFormConstraints((TextField) field);
} else if (field instanceof TextArea) {
_setFormConstraints((TextArea) field);
} else if (field instanceof ComboBox<?>) {
_setFormConstraints((ComboBox<?>) field);
} else if (field instanceof ChoiceBox<?>) {
_setFormConstraints((ChoiceBox<?>) field);
} else if (field instanceof CheckBox) {
_setFormConstraints((CheckBox) field);
} else if (field instanceof Spinner<?>) {
_setFormConstraints((Spinner<?>) field);
} else if (field instanceof VBox) {
_setFormConstraints((VBox) field);
} else if (field instanceof Label) {
_setFormConstraints((Label) field);
} else {
LOGGER.info("FormPane.setFormConstraints(): unknown field type: " + field.getClass().getName());
}
}
@SuppressWarnings("unchecked")
@Override
public boolean marathon_select(String value) {
Spinner<?> spinner = (Spinner<?>) getComponent();
if (!spinner.isEditable()) {
@SuppressWarnings("rawtypes")
SpinnerValueFactory factory = ((Spinner<?>) getComponent()).getValueFactory();
Object convertedValue = factory.getConverter().fromString(value);
factory.setValue(convertedValue);
return true;
}
TextField spinnerEditor = spinner.getEditor();
if (spinnerEditor == null) {
throw new JavaAgentException("Null value returned by getEditor() on spinner", null);
}
IJavaFXElement ele = JavaFXElementFactory.createElement(spinnerEditor, driver, window);
spinnerEditor.getProperties().put("marathon.celleditor", true);
ele.marathon_select(value);
return true;
}
@Test
public void selectEditableListSpinner() {
IJavaFXElement spinner = driver.findElementByName("list-spinner");
Spinner<?> spinnerNode = (Spinner<?>) getPrimaryStage().getScene().getRoot().lookup("#list-spinner");
Platform.runLater(() -> {
spinnerNode.setEditable(true);
spinner.marathon_select("December");
});
new Wait("Waiting for spinner to set value") {
@Override
public boolean until() {
Object value = spinnerNode.getValue();
return value.toString().equals("December");
}
};
}
@Test
public void listSpinnerWithInvalidValue() {
IJavaFXElement spinner = driver.findElementByName("list-spinner");
Spinner<?> spinnerNode = (Spinner<?>) getPrimaryStage().getScene().getRoot().lookup("#list-spinner");
Platform.runLater(() -> {
spinnerNode.setEditable(true);
spinner.marathon_select("Decem");
});
new Wait("Spinner was not reset.") {
@Override
public boolean until() {
Object value = spinnerNode.getValue();
return value.toString().equals("January");
}
};
}
@Test
public void selectDoubleSpinner() {
IJavaFXElement spinner = driver.findElementByName("double-spinner");
Spinner<?> spinnerNode = (Spinner<?>) getPrimaryStage().getScene().getRoot().lookup("#double-spinner");
Platform.runLater(() -> {
spinnerNode.setEditable(false);
spinner.marathon_select("38.9");
});
new Wait("Waiting for spinner to set value") {
@Override
public boolean until() {
Double value = (Double) spinnerNode.getValue();
return value == 38.9;
}
};
}
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;
}
@Test
public void getText() {
Spinner<?> spinner = (Spinner<?>) getPrimaryStage().getScene().getRoot().lookup(".spinner");
LoggingRecorder lr = new LoggingRecorder();
List<String> text = new ArrayList<>();
Platform.runLater(() -> {
RFXSpinner rfxSpinner = new RFXSpinner(spinner, null, null, lr);
spinner.getEditor().setText("March");
rfxSpinner.focusLost(null);
text.add(rfxSpinner.getAttribute("text"));
});
new Wait("Waiting for spinner text.") {
@Override
public boolean until() {
return text.size() > 0;
}
};
AssertJUnit.assertEquals("March", text.get(0));
}
private void commitEditorText(Spinner<T> spinner) {
if (!spinner.isEditable()) {
return;
}
String text = spinner.getEditor().getText();
SpinnerValueFactory<T> valueFactory = spinner.getValueFactory();
if (valueFactory != null) {
StringConverter<T> converter = valueFactory.getConverter();
if (converter != null) {
try {
T value = converter.fromString(text);
setValue(valueFactory, value);
} catch (Exception e) {
spinner.getEditor().setText(valueFactory.getValue().toString());
}
}
}
}
public SpinnerTableCell(TableColumn<T, Integer> column, int min, int max) {
spinner = new Spinner<>(min, max, 1);
spinner.editableProperty().bind(column.editableProperty());
spinner.disableProperty().bind(column.editableProperty().not());
tableRowProperty().addListener(e -> {
TableRow<?> row = getTableRow();
if (row == null)
return;
MsSpectrumDataSet dataSet = (MsSpectrumDataSet) row.getItem();
if (dataSet == null)
return;
spinner.getValueFactory().valueProperty().bindBidirectional(dataSet.lineThicknessProperty());
disableProperty().bind(dataSet.renderingTypeProperty().isEqualTo(MsSpectrumType.CENTROIDED));
});
}
public SpinnerTableCell(TableColumn<T, Integer> column, int min, int max) {
spinner = new Spinner<>(min, max, 1);
spinner.editableProperty().bind(column.editableProperty());
spinner.disableProperty().bind(column.editableProperty().not());
tableRowProperty().addListener(e -> {
TableRow<?> row = getTableRow();
if (row == null)
return;
ChromatogramPlotDataSet dataSet = (ChromatogramPlotDataSet) row.getItem();
if (dataSet == null)
return;
spinner.getValueFactory().valueProperty().bindBidirectional(dataSet.lineThicknessProperty());
});
}
protected void addSpinnerAnglePropBinding(final @NotNull Spinner<Double> spinner, final @NotNull ShapeProperties<Double> prop) {
final var spinnerBaseBinder = spinnerBinder()
.on(spinner)
.end(() -> update());
spinnerBaseBinder
.toProduce(() -> createModShProp(null, prop))
.then((i, c) -> c.setValue(Math.toRadians((Double) i.getWidget().getValue())))
.when(handActiv)
.bind();
spinnerBaseBinder
.toProduce(() -> firstPropPen(null, prop))
.then((i, c) -> c.setValue(Math.toRadians((Double) i.getWidget().getValue())))
.when(pencilActiv)
.bind();
}
@SuppressWarnings("unchecked")
protected <T extends Number> void addSpinnerPropBinding(final @NotNull Spinner<T> spinner, final @NotNull ShapeProperties<T> prop) {
final var spinnerBaseBinder = spinnerBinder()
.on(spinner)
.end(() -> update());
spinnerBaseBinder
.toProduce(() -> createModShProp(null, prop))
.then((i, c) -> c.setValue((T) i.getWidget().getValue()))
.when(handActiv)
.bind();
spinnerBaseBinder
.toProduce(() -> firstPropPen(null, prop))
.then((i, c) -> c.setValue((T) i.getWidget().getValue()))
.when(pencilActiv)
.bind();
}
protected void addSpinnerXYPropBinding(final @NotNull Spinner<Double> spinnerX, final @NotNull Spinner<Double> spinnerY,
final @NotNull ShapeProperties<Point> property) {
final var baseBinder = spinnerBinder()
.on(spinnerX, spinnerY)
.end(() -> update());
baseBinder
.toProduce(() -> new ModifyShapeProperty<>(property, canvas.getDrawing().getSelection().duplicateDeep(false), null))
.then(c -> c.setValue(ShapeFactory.INST.createPoint(spinnerX.getValue(), spinnerY.getValue())))
.when(handActiv)
.bind();
baseBinder
.toProduce(() -> new ModifyEditingParameter<>(property, editing, null))
.then(c -> c.setValue(ShapeFactory.INST.createPoint(spinnerX.getValue(), spinnerY.getValue())))
.when(pencilActiv)
.bind();
}
@Test
public void testEditPlotDoesNotCreateANewOne() {
when(editing.getCurrentChoice()).thenReturn(EditionChoice.PLOT);
when(editing.createShapeInstance()).thenReturn(ShapeFactory.INST.createPlot(ShapeFactory.INST.createPoint(), 0, 5, "x", false));
final ShapePlotCustomiser plot = injector.getInstance(ShapePlotCustomiser.class);
plot.maxXSpinner = Mockito.mock(Spinner.class);
plot.minXSpinner = Mockito.mock(Spinner.class);
plot.nbPtsSpinner = Mockito.mock(Spinner.class);
when(plot.maxXSpinner.getValue()).thenReturn(10d);
when(plot.minXSpinner.getValue()).thenReturn(0d);
when(plot.nbPtsSpinner.getValue()).thenReturn(10);
Cmds.of(addPlot).execute();
final ViewPlot v = (ViewPlot) canvas.getViews().getChildren().get(0);
Cmds.of(() -> doubleClickOn(v),
() -> type(KeyCode.DELETE).write("x 2 mul"),
() -> type(KeyCode.ENTER)).execute();
assertEquals(1, canvas.getDrawing().size());
assertEquals(1, canvas.getViews().getChildren().size());
}
@Override
public void start(final Stage primaryStage) {
primaryStage.setTitle(this.getClass().getSimpleName());
final DefaultNumericAxis xAxis = new DefaultNumericAxis("X Position");
final DefaultNumericAxis yAxis = new DefaultNumericAxis("Y Position");
final XYChart chart = new XYChart(xAxis, yAxis);
chart.setTitle("Test data");
final MountainRangeRenderer mountainRangeRenderer = new MountainRangeRenderer();
chart.getRenderers().set(0, mountainRangeRenderer);
// mountainRangeRenderer.getDatasets().add(readImage());
chart.getDatasets().setAll(createTestData(0.0));
// DataSet3D additionalData = createTestData(1.0);
// additionalData.setStyle("strokeColor=red");
// chart.getDatasets().add(additionalData);
chart.setLegendVisible(true);
chart.getPlugins().add(new Zoomer());
chart.getPlugins().add(new Panner());
chart.getPlugins().add(new EditAxis());
final Spinner<Double> mountainRangeOffset = new Spinner<>(0.0, 10.0, mountainRangeRenderer.getMountainRangeOffset(),
0.1);
mountainRangeRenderer.mountainRangeOffsetProperty().bind(mountainRangeOffset.valueProperty());
mountainRangeOffset.valueProperty().addListener((ch, o, n) -> {
if (n.equals(o)) {
return;
}
chart.requestLayout();
});
final Scene scene = new Scene(
new BorderPane(chart, new ToolBar(new Label(""), mountainRangeOffset), null, null, null), 1200, 800);
primaryStage.setScene(scene);
primaryStage.show();
primaryStage.setOnCloseRequest(evt -> Platform.exit());
}
/**
* {@inheritDoc}
*/
@Override
public void initializeParts() {
super.initializeParts();
node = new StackPane();
fieldLabel = new Label();
readOnlyLabel = new Label();
editableSpinner = new Spinner<>();
editableSpinner.setEditable(true);
}
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());
}
public static void reset() {
add(Node.class, JavaFXElement.class);
add(TextInputControl.class, JavaFXTextInputControlElement.class);
add(HTMLEditor.class, JavaFXHTMLEditor.class);
add(CheckBox.class, JavaFXCheckBoxElement.class);
add(ToggleButton.class, JavaFXToggleButtonElement.class);
add(Slider.class, JavaFXSliderElement.class);
add(Spinner.class, JavaFXSpinnerElement.class);
add(SplitPane.class, JavaFXSplitPaneElement.class);
add(ProgressBar.class, JavaFXProgressBarElement.class);
add(ChoiceBox.class, JavaFXChoiceBoxElement.class);
add(ColorPicker.class, JavaFXColorPickerElement.class);
add(ComboBox.class, JavaFXComboBoxElement.class);
add(DatePicker.class, JavaFXDatePickerElement.class);
add(TabPane.class, JavaFXTabPaneElement.class);
add(ListView.class, JavaFXListViewElement.class);
add(TreeView.class, JavaFXTreeViewElement.class);
add(TableView.class, JavaFXTableViewElement.class);
add(TreeTableView.class, JavaFXTreeTableViewElement.class);
add(CheckBoxListCell.class, JavaFXCheckBoxListCellElement.class);
add(ChoiceBoxListCell.class, JavaFXChoiceBoxCellElement.class);
add(ComboBoxListCell.class, JavaFXComboBoxCellElement.class);
add(CheckBoxTreeCell.class, JavaFXCheckBoxTreeCellElement.class);
add(ChoiceBoxTreeCell.class, JavaFXChoiceBoxCellElement.class);
add(ComboBoxTreeCell.class, JavaFXComboBoxCellElement.class);
add(TableCell.class, JavaFXTableViewCellElement.class);
add(CheckBoxTableCell.class, JavaFXCheckBoxTableCellElement.class);
add(ChoiceBoxTableCell.class, JavaFXChoiceBoxCellElement.class);
add(ComboBoxTableCell.class, JavaFXComboBoxCellElement.class);
add(TreeTableCell.class, JavaFXTreeTableCellElement.class);
add(CheckBoxTreeTableCell.class, JavaFXCheckBoxTreeTableCell.class);
add(ChoiceBoxTreeTableCell.class, JavaFXChoiceBoxCellElement.class);
add(ComboBoxTreeTableCell.class, JavaFXComboBoxCellElement.class);
add(WebView.class, JavaFXWebViewElement.class);
add(GenericStyledArea.GENERIC_STYLED_AREA_CLASS, RichTextFXGenericStyledAreaElement.class);
}
@Test
public void selectListSpinner() {
IJavaFXElement spinner = driver.findElementByName("list-spinner");
Spinner<?> spinnerNode = (Spinner<?>) getPrimaryStage().getScene().getRoot().lookup("#list-spinner");
Platform.runLater(() -> {
spinner.marathon_select("June");
});
new Wait("Waiting for spinner to set value") {
@Override
public boolean until() {
Object value = spinnerNode.getValue();
return value.toString().equals("June");
}
};
}
@Test
public void selectIntegerSpinner() {
IJavaFXElement spinner = driver.findElementByName("integer-spinner");
Spinner<?> spinnerNode = (Spinner<?>) getPrimaryStage().getScene().getRoot().lookup("#integer-spinner");
Platform.runLater(() -> {
spinner.marathon_select("35");
});
new Wait("Waiting for spinner to set value") {
@Override
public boolean until() {
Integer value = (Integer) spinnerNode.getValue();
return value == 35;
}
};
}
@Test
public void selectEditableIntegerSpinner() {
IJavaFXElement spinner = driver.findElementByName("integer-spinner");
Spinner<?> spinnerNode = (Spinner<?>) getPrimaryStage().getScene().getRoot().lookup("#integer-spinner");
Platform.runLater(() -> {
spinner.marathon_select("45");
});
new Wait("Waiting for spinner to set value") {
@Override
public boolean until() {
Integer value = (Integer) spinnerNode.getValue();
return value == 45;
}
};
}
@Test
public void selectEditableDoubleSpinner() {
IJavaFXElement spinner = driver.findElementByName("double-spinner");
Spinner<?> spinnerNode = (Spinner<?>) getPrimaryStage().getScene().getRoot().lookup("#double-spinner");
Platform.runLater(() -> {
spinner.marathon_select("49.0");
});
new Wait("Waiting for spinner to set value") {
@Override
public boolean until() {
Double value = (Double) spinnerNode.getValue();
return value == 49.0;
}
};
}
public SpinnerSample() {
Spinner<Object> listSpinner = createListSpinner();
Spinner<Integer> integerSpinner = createIntegerSpinner();
Spinner<Double> doubleSpinner = createDoubleSpinner();
HBox hBox = new HBox();
hBox.setSpacing(20.0);
hBox.getChildren().addAll(listSpinner, integerSpinner, doubleSpinner);
getChildren().add(hBox);
}
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 focusLost(RFXComponent next) {
Spinner<?> spinner = (Spinner<?>) node;
String currentValue = getSpinnerText(spinner);
if (!currentValue.equals(oldValue)) {
recorder.recordSelect(this, currentValue);
}
}
@Test
public void selectListSpinner() {
Spinner<?> spinner = (Spinner<?>) getPrimaryStage().getScene().getRoot().lookup(".spinner");
LoggingRecorder lr = new LoggingRecorder();
Platform.runLater(() -> {
RFXSpinner rfxSpinner = new RFXSpinner(spinner, null, null, lr);
spinner.getEditor().setText("March");
rfxSpinner.focusLost(null);
});
List<Recording> recordings = lr.waitAndGetRecordings(1);
Recording recording = recordings.get(0);
AssertJUnit.assertEquals("recordSelect", recording.getCall());
AssertJUnit.assertEquals("March", recording.getParameters()[0]);
}
@Test
public void selectListEditableSpinner() {
Spinner<?> spinner = (Spinner<?>) getPrimaryStage().getScene().getRoot().lookup(".spinner");
LoggingRecorder lr = new LoggingRecorder();
Platform.runLater(() -> {
spinner.setEditable(true);
RFXSpinner rfxSpinner = new RFXSpinner(spinner, null, null, lr);
spinner.getEditor().setText("April");
rfxSpinner.focusLost(null);
});
List<Recording> recordings = lr.waitAndGetRecordings(1);
Recording recording = recordings.get(0);
AssertJUnit.assertEquals("recordSelect", recording.getCall());
AssertJUnit.assertEquals("April", recording.getParameters()[0]);
}
@Test
public void selectIntegerSpinner() {
Spinner<?> spinner = (Spinner<?>) getPrimaryStage().getScene().getRoot().lookup("#integer-spinner");
LoggingRecorder lr = new LoggingRecorder();
Platform.runLater(() -> {
RFXSpinner rfxSpinner = new RFXSpinner(spinner, null, null, lr);
spinner.getEditor().setText("25");
rfxSpinner.focusLost(null);
});
List<Recording> recordings = lr.waitAndGetRecordings(1);
Recording recording = recordings.get(0);
AssertJUnit.assertEquals("recordSelect", recording.getCall());
AssertJUnit.assertEquals("25", recording.getParameters()[0]);
}
@Test
public void selectDoubleSpinner() {
Spinner<?> spinner = (Spinner<?>) getPrimaryStage().getScene().getRoot().lookup("#double-spinner");
LoggingRecorder lr = new LoggingRecorder();
Platform.runLater(() -> {
RFXSpinner rfxSpinner = new RFXSpinner(spinner, null, null, lr);
spinner.getEditor().setText("35.5");
rfxSpinner.focusLost(null);
});
List<Recording> recordings = lr.waitAndGetRecordings(1);
Recording recording = recordings.get(0);
AssertJUnit.assertEquals("recordSelect", recording.getCall());
AssertJUnit.assertEquals("35.5", recording.getParameters()[0]);
}