Ich habe eine 9x9 GridPane
in SceneBuilder erstellt, und ich möchte jede Zelle einzeln TextFields
hinzufügen. Ich bin sicher, es gibt andere Methoden, um eine große Tabelle wie diese zu erstellen, aber ich suche nicht nach einer anderen Möglichkeit, dies zu tun (das ist Teil meiner Lernerfahrung). Ich möchte nicht TextFields
in FXML/SceneBuilder hinzufügen; Ich möchte sie in einem Array verfolgen, damit ich auf ihre individuellen Werte zugreifen kann. Daher möchte ich sie einzeln im Controller erstellen und sie dann zum Array sowie zu jeder Zelle der GridPane
hinzufügen.Erstellen einer Szene mit FXML und dem Controller in JavaFX
Hier ist der Teil meines Controller, die TextFields
(Ich habe versucht, die Schaffung sie, bevor sich auf den Array hinzufügen) zu hinzufügen versucht:
@FXML
private GridPane gridPane;
private TextField myTextField[][] = new TextField[9][9];
.
.
.
@Override
public void initialize(URL url, ResourceBundle rb) {
for (int i = 0; i < 9; ++i){
for (int j = 0; j < 9; ++j){
TextField tempTextField = new TextField();
Font myFont = new Font("System",38);
tempTextField.setFont(myFont);
tempTextField.setText(i + ", " + j);
tempTextField.setPrefSize(70, 70);
myTextField[i][j] = tempTextField;
gridPane.add(tempTextField,i,j);
System.out.println("TextField " +i+j+" Created!");
}
}
}
ich vor der Laufzeit keinen Fehler bekommen und die Szene ist nicht aktualisiert.
EDIT: Ich habe am StackTrace
sah und bemerkte, dass ich einen Null-Zeiger auf
gridPane.add(tempTextField,i,j);
FXML Datei bin immer: Umsetzung
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" prefHeight="654.0" prefWidth="747.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="sudokusolver.FXMLDocumentController">
<children>
<BorderPane prefHeight="654.0" prefWidth="747.0">
<center>
<GridPane fx:id="gridPane" gridLinesVisible="true" prefHeight="198.0" prefWidth="200.0" BorderPane.alignment="CENTER">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
</GridPane>
</center>
<bottom>
<HBox alignment="CENTER" prefHeight="40.0" prefWidth="747.0" BorderPane.alignment="CENTER">
<children>
<FlowPane prefHeight="200.0" prefWidth="200.0">
<children>
<Button fx:id="loadButton" alignment="CENTER" contentDisplay="CENTER" minHeight="-Infinity" minWidth="-Infinity" onAction="#setGrid" prefHeight="35.0" prefWidth="100.0" text="Load Board" />
<Button fx:id="solveButton" alignment="CENTER" contentDisplay="CENTER" minHeight="-Infinity" minWidth="-Infinity" onAction="#sudokuSolve" prefHeight="35.0" prefWidth="100.0" text="Solve" />
</children>
</FlowPane>
</children>
</HBox>
</bottom>
</BorderPane>
</children>
</AnchorPane>
So offensichtlich 'gridPane' ist null. Vielleicht posten Sie die FXML-Datei? –
@James_D Ich habe aktualisiert. Könnten Sie mir auch mitteilen, ob das Aktualisieren der Frage Personen benachrichtigt, die kommentiert haben? So kann ich sinnlose Tags/Kommentare vermeiden. – Raitab
Nein, es gibt keine automatischen Benachrichtigungen für eine Bearbeitung einer Frage (außer Benachrichtigungen, wenn jemand anders Ihre Frage oder Antwort bearbeitet). –