So erstellen Sie ein Integer-spinner mit FXML
Ich versuche zum erstellen einer Integer
Spinner
, sondern eine Double
erstellt, statt.
Test.class
package com.neonorb.test;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Insets;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
public class Test extends Application{
@Override
public void start(Stage stage) throws Exception {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Demo.fxml"));
Parent root = fxmlLoader.load();
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
DemoController.class
package com.neonorb.test;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Spinner;
import java.net.URL;
import java.util.ResourceBundle;
public class DemoController implements Initializable{
@FXML
private Spinner<Integer> spinner;
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
System.out.println(spinner.getValue());
}
}
Demo.fxml
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.control.Spinner?>
<?import java.lang.Integer?>
<BorderPane xmlns:fx="http://javafx.com/fxml" fx:controller="com.neonorb.test.DemoController">
<Spinner fx:id="spinner" min="1" initialValue="1" amountToStepBy="1">
<max>
<Integer fx:constant="MAX_VALUE"/>
</max>
</Spinner>
</BorderPane>
Wenn ich es ausführen es gibt 1.0
ist, wie ich weiß, es ist ein Double
spinner.
Ich denke, was passiert ist, dass FXMLLoader
ist die Wahl der falschen Konstruktor für Spinner
. Wie wähle ich die Integer
?
Das funktioniert für mich: ich sehe die Ausgabe
Mein Netbeans nicht zeigen, dass Argumente min, initialValue oder amountToStepBy bei Spinner-tag. Aber Sie sind alle versehen mit der
Ja, es ist nicht in den Unterlagen... ich hatte, um sich in den Quellcode. (Verstehen Sie mich nicht begonnen auf der Dokumentation, die für
1
(obwohl ich überrascht war... die Argumente in allen Konstruktoren versehen sind @NamedArg
mit dem gleichen Wert, so dass ich nicht sicher bin, wie es bestimmt, welche zu verwenden). @NwDx hat die richtige Antwort, wenn Sie sicher sein wollen, den richtigen Wert der Fabrik.Mein Netbeans nicht zeigen, dass Argumente min, initialValue oder amountToStepBy bei Spinner-tag. Aber Sie sind alle versehen mit der
@NamedArg
. Seltsames Verhalten, weiß auch nicht warum.Ja, es ist nicht in den Unterlagen... ich hatte, um sich in den Quellcode. (Verstehen Sie mich nicht begonnen auf der Dokumentation, die für
FXMLLoader
und NamedArg
, etc...)InformationsquelleAutor Chris Smith | 2015-07-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Problem
Müssen Sie einen Wert festlegen, der Fabrik, der spinner. Sonst werden Sie konfrontiert mit der Art Zwang. Wenn Sie nicht in der Lage sein, dort können Sie definieren, Integer-Werte, wird bezeichnet durch statische valueOf().
JavaFX Einführung in die FXML Notizen über Geben Sie Zwang:
Lösung mit einer Fabrik
Es besteht bereits eine IntegerSpinnerValueFactory. Denn es ist eine geschachtelte Klasse von SpinnerValueFactory Sie haben, um es mit einem Punkt in der tag-Namen.
Gibt es drei Konstruktoren zur Verfügung, Sie können min - /max-und min - /max - /initialValue und min - /max - /initialValue/amountToStepBy. Dies geschieht, indem es als Attribut.
Demo.fxml
Lösung ohne Factory
Sie werden auch in der Lage, zu definieren, von zwei Variablen und verwenden Sie Sie als eine statische valueOf(). Wie im obigen Zitat mit der statischen Methode valueOf (). So Ihr FXMLLoader nicht haben, zu erraten, welcher Typ Sie wohl bedeuten. Es ruft den Konstruktor mit int-Werten.
Demo.fxml
InformationsquelleAutor NwDev
Ein kleines update für die FXML-Datei...
Gehören
dann
<?import javafx.scene.control.* ?>
. Die Standard -amountToStepBy
ist definiert durch 1, so dass keine Notwendigkeit für das schreiben explicit. Bitte Lesen Sie die JavaDocInformationsquelleAutor Johntor