SceneBuilder에서 9x9 GridPane
을 만들고 각 셀에 개별 TextFields
을 추가하고 싶습니다. 이와 같은 대형 테이블을 만드는 다른 방법이있을 것이라고 확신하지만, 이것을 수행하는 다른 방법을 찾지는 않습니다 (이것은 내 학습 경험의 일부입니다). FXML/SceneBuilder에 TextFields
을 추가하고 싶지 않습니다. 배열에서 이들을 추적하여 개별 값에 액세스 할 수 있으므로 컨트롤러에서 한 번에 하나씩 만들고 배열에 추가하고 GridPane
의 각 셀에 추가하려고합니다. 여기 JavaFX에서 FXML과 컨트롤러를 모두 사용하여 장면 만들기
TextFields
추가하려고 내 컨트롤러의 일부입니다
@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!");
}
}
}
내가 실행하기 전에 오류가 발생하지 않는 장면이 아니다 업데이트되었습니다.
편집 : 나는 StackTrace
쳐다 보면서 내가
gridPane.add(tempTextField,i,j);
FXML 파일에서 널 포인터를 얻고 것으로 나타났습니다 :
<?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>
분명히 'gridPane'은 null입니다. 어쩌면 FXML 파일을 게시할까요? –
@James_D 업데이트했습니다. 또한 질문을 업데이트하면 댓글을 달았던 사람들에게 알릴 수 있습니까? 그렇게하면 무의미한 태그/주석을 피할 수 있습니다. – Raitab
아니요, 질문 수정에 대한 자동 알림이 없습니다 (다른 사람이 질문이나 답변을 수정 한 경우 알림 제외). –