[JavaFX] Spinner so einstellen, dass er nicht leer bleiben darf?

Wenn ich einen IntegerSpinner leer lasse und das Feld verlasse, bekomme ich eine NullPointerException, da logischer Weise nichts im Spinner steht.

Ich möchte den Spinner so einstellen, dass er mindestens eine Zahl beinhalten muss und maximal zweistellig sein darf. Ich meine damit nicht den Mindest- oder Maximalwert. Beispiel:

""    - leer;                 so ists falsch
"1"   - nicht leer;           so ists richtig
"11"  - nicht leer;           so ists richtig
"111" - mehr als zwei Zahlen; so ists falsch

Ich hatte schon mal sehr lange dieses Problem.

Nun möchte ich entweder auch eine eigene Fehlermeldung für diese NullPointerException haben (um z. B. .requestFocus() zu machen) oder einfach die Eingaben blockieren, wenn es, wie oben beschrieben, falsch gemacht wurde.

Mit regex kann ich schon mal einstellen, dass der Spinner eine rote Farbe bekommt (als Hinweis), wenn ein non-Integer eingegeben wurde oder zu wenige bzw. zu viele Zahlen eingegeben wurden:

if (!options_Spinner_StartInterval_seconds.getEditor().getText().matches("^-?\\d+$") || !options_Spinner_StartInterval_seconds.getEditor().getText().matches("^-?\\d.{0,2}$"))
    options_Spinner_StartInterval_seconds.setStyle("-fx-focus-color: #f00;");

Wenn ich aber die Anzahl der Zahlen im Spinner überprüfe, kann ich kein

spinner.requestFocus();

machen - ich kann den Spinner trotzdem verlassen.

Computer, programmieren, Java, JavaFX, Regulärer Ausdruck
JavaFX TableView mit Daten aus der Datenbank füllen?

Hey Leute,

ich versuche gerade meine Tabelle mit Daten aus der Datenbank zu füllen aber dabei bekomme ich eine Fehlermeldung. Kann mir jemand dabei helfen?

Users Klasse:

public class Users {
    private int id;
    private String userToken;
    private String firstname;
    private String lastname;
    private String emailAddress;
    private String creationTime;
    private Button deleteButton;

    public Users(int id, String userToken, String firstName, String lastName, String emailAddress, String creationTime) {
        this.id = id;
        this.userToken = userToken;
        this.firstname = firstName;
        this.lastname = lastName;
        this.emailAddress = emailAddress;
        this.creationTime = creationTime;
    }
}

Die Fehlermeldung:

UserController:

public class UserController {

    @FXML
    private TableColumn<Users, Integer> idCol;

    @FXML
    private TableColumn<Users, String> creationTimeCol;

    @FXML
    private TableColumn<Users, String> emailCol;

    @FXML
    private TableColumn<Users, String> firstnameCol;

    @FXML
    private TableColumn<Users, String> lastnameCol;

    @FXML
    private TableColumn<Users, String> deleteCol;

    @FXML
    private TableColumn<Users, String> userTokenCol;

    @FXML
    private TableView<Users> table;

    @FXML
    private TextField textField;

    public void printUser() {
        ObservableList<Users> allUserList = FXCollections.observableArrayList();

        try {
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:2020/database", "root", "");
            System.out.println("Connected");
            //PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM usertable");
            ResultSet resultSet = connection.createStatement().executeQuery("SELECT * FROM usertable");
            while (resultSet.next())  {
                allUserList.add(new Users(Integer.parseInt(resultSet.getString("id")),
                        resultSet.getString("userToken"), resultSet.getString("firstName"),
                        resultSet.getString("lastName"), resultSet.getString("emailAddress"),
                        resultSet.getString("creationTime")));

            }

        } catch (SQLException ignored) {
            ignored.printStackTrace();
        }
        idCol.setCellValueFactory(new PropertyValueFactory<Users, Integer>("id"));
        userTokenCol.setCellValueFactory(new PropertyValueFactory<Users, String>("userToken"));
        firstnameCol.setCellValueFactory(new PropertyValueFactory<Users, String>("firstName"));
        lastnameCol.setCellValueFactory(new PropertyValueFactory<Users, String>("lastName"));
        emailCol.setCellValueFactory(new PropertyValueFactory<Users, String>("emailAddress"));
        creationTimeCol.setCellValueFactory(new PropertyValueFactory<Users, String>("creationTime"));
        table.setItems(allUserList);
        System.out.println("all user got");
    }
}

Bild zum Beitrag
Computer, programmieren, Java, Datenbank, JavaFX, MySQL, GUI
Kann mir jemand helfen, JavaFX in Eclipse zum Laufen zu bringen?

Hallo,

ich bin mit meinem Java-Buch nun bei JavaFX angelangt und muss nun, um den Code weiterverfolgen zu können, dieses installieren. Doch funktioniert dieses aus irgendeinem Grund bei mir nicht.

Das sind die Schritte, die ich aus einigen Websites und Videos habe und durchgeführt habe:

  1. Ich habe das Eclipse-Plugin "e(fx)clipse" installiert.
  2. Ich habe JavaFX17 installiert und den zip-Ordner extrahiert. (Download Website: https://gluonhq.com/products/javafx/)
  3. Dann habe ich in Eclipse eine User Bibliothek angelegt: Window --> Preferences --> Java --> BuildPath --> User Libraries --> New --> (Name eingeben) --> Add External Jars
  4. Die Dateien in dieser Bibliothek mit denen aus den Videos und Websiten verglichen. Das Ergebnis war, dass alle Dateien dabei sind.
  5. Ein JavaFX-Project in Eclipse erstellt: New --> Other --> JavaFX --> JavaFX Project --> (Namen eingeben) --> finish
  6. User Bibliothek zum Projekt hinzugefügt: Rechtsklick auf Projekt --> BuildPath --> Configure BuildPath --> Add Library in ClassPath --> User Library --> Next --> Bibliothek auswählen --> Finish

Mit dem Erstellen des Projekts wurden automatisch ein Package und eine Klasse erstellt, die voller Fehlermeldungen waren. Bei den Websites und Videos sind diese nach dem Hinzufügen der User Bibliothek verschwunden, doch bei mir sind sie weiterhin vorhanden. So sieht das aus:

Ich hoffe ihr könnt mir helfen.

Vielen Dank schon mal im voraus.

Bild zum Beitrag
Computer, programmieren, Java, Eclipse, JavaFX, Technologie
JavaFX Button auf Controller Funktion zeigen?

Ich will einen Taschenrechner programmieren. Backend logik ist soweit vorhanden, fehlt nur das GUI

Ich dachte mir, dass ich eine Klasse mache, wo ich das GridPane extende und im Konstruktor die buttons adde.

So sieht das etwa aus:

public class FXPane extends GridPane {
    private String[][] buttonTexts = {
            {"7", "8", "9", "(", ")", "BS"},
            {"4", "5", "6", "+", "-", "CE"},
            {"1", "2", "3", "*", "/", "C"},
            {"±", "0", ",", "x^y", "1/x", "="}
    };

    FXPane() {
        for(int y = 0; y < buttonTexts.length;y++){
            for(int x = 0; x<buttonTexts[0].length;x++){
                Button theButtonToAdd = new Button(buttonTexts[y][x]);
                theButtonToAdd.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);
                this.add(theButtonToAdd,x,y);
            }
        }
    }
}

Der Controller sieht so aus:

public class Controller {
    @FXML
    private Label fxDisplay;
    @FXML
    private GridPane fxGrid;

    private FXPane buttonPane = new FXPane();

    // called by the FXML loader after the labels declared above are injected:
    public void initialize() {
        fxDisplay.setText("asd");
        fxGrid.add(buttonPane,0,0);
    }
}

Die Namen und der Hack über 2 Gridpanes änder ich noch, geht aber derzeit eher POC, da es das erste mal mit JavaFX ist.

Mein Plan ist, dass die Buttons auf eine Funktion aus dem Controller zeigt bzw aufruft.

Nur ist das vermutlich nicht (schön) möglich. Gibts ne bessere Variante oder ist das der einzige Weg?

Der Plan war, dass der Controller die Taschenrechner Instanz besitzt und jeder Button dann die eingabe an die Taschenrechner Instanz gibt. Nur brauche ich dafür halt noch ein übersetzer, damit der jeweilige Button die jeweilige Eingabe in den Taschenrechner gibt.

Ich könnte natürlich die Controller Instanz per this dem Konstruktor übergeben und dann in FXPane speichern. Nur ist das gut?

Computer, Technik, programmieren, Java, JavaFX, Technologie, GUI

Meistgelesene Fragen zum Thema JavaFX