J'ai créé un 9x9 GridPane
dans SceneBuilder, et je souhaite ajouter TextFields
à chaque cellule. Je suis certain qu'il existe d'autres méthodes pour créer une grande table comme celle-ci, mais je ne cherche pas une autre façon de le faire (cela fait partie de mon expérience d'apprentissage). Je ne veux pas ajouter TextFields
dans FXML/SceneBuilder; Je veux garder une trace d'eux dans un tableau afin que je puisse accéder à leurs valeurs individuelles, donc je veux les créer un à la fois dans le contrôleur, puis les ajouter à la matrice ainsi qu'à chaque cellule du GridPane
.Création d'une scène en utilisant à la fois FXML et le contrôleur dans JavaFX
Voici la partie de mon contrôleur qui tente d'ajouter TextFields
(je les ai essayé de créer avant de les ajouter au tableau):
@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!");
}
}
}
Je ne reçois pas d'erreur avant l'exécution et la scène n'est pas actualisé.
EDIT: Je l'ai regardé l'StackTrace
et a remarqué que je reçois un pointeur nul à
gridPane.add(tempTextField,i,j);
FXML fichier:
<?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>
Donc, évidemment, 'gridPane' est nul. Peut-être poster le fichier FXML? –
@James_D J'ai mis à jour. Aussi, pourriez-vous me faire savoir si la mise à jour de la question informe les personnes qui ont commenté. De cette façon, je peux éviter les tags/commentaires inutiles comme celui-ci. – Raitab
Non, il n'y a pas de notifications automatiques pour une modification à une question (autre que les notifications si quelqu'un d'autre édite votre question ou votre réponse). –