VBox の「テーブル化された」表現を必要とするプロジェクトに取り組んでいます。アプリケーションの階層レイアウトは、GridPane -> VBox (セルの 1 つ) -> VBoxes (異なるデータセットを重ねて表示) -> データです。2 つのシーンがあります。
シーン 1 にデータが表示されます。ユーザーは、フォームを使用して、シーン 2 のボタンをクリックしてデータを追加できます。その後、追加されたデータは、シーン 1 の親 VBox 内の既存のデータの下に VBox として再び表示されます。
これを明確にするコードは次のとおりです。
私のシーン 1 .fxml ファイルは次のようになります (簡略化)。
<GridPane fx:id="grid" fx:controller="application.Controller">
[here: ColumnConstraints]
<children>
<VBox fx:id="parentBox" GridPane.columnIndex="0" GridPane.rowIndex="1"/>
<Button fx:id="goToScene2" text="+" onAction="#goToScene2"/>
</children>
</GridPane>
シーン 2 には、ボタンと TextField だけがあります。
<GridPane fx:id="grid" fx:controller="application.AddDataController">
[here: ColumnConstraints]
<children>
<Button fx:id="addData" text="add" onAction="#bAddData"/>
<TextField fx:id="data"/>
</children>
</GridPane>
私のシーン 1 コントローラー (コントローラー) は次のようになります。
public class Controller implements Initializable {
@FXML Button goToScene2;
@FXML VBox parentBox;
@Override
public void initialize(URL location, ResourceBundle resources) {
}
public void addData(String s) {
Label lbl = new Label(s);
VBox dataBox = new VBox();
dataBox.setPadding(new Insets(15, 5, 15, 5));
dataBox.setSpacing(5);
dataBox.setMaxHeight(80);
dataBox.getChildren().add(lbl);
parentBox.getChildren().add(dataBox);
}
}
dataBox にはラベルよりも多くの要素が含まれているため、これはそのまま設計されていますが、このコンテキストでは関係がないようです。
私のシーン 2 コントローラー (addDataController) は次のようになります。
@FXML Button addData;
@FXML TextField data;
@FXML protected void bAddData(){
String content = data.getText();
FXMLLoader fxmlLoader = new FXMLLoader();
Pane p = fxmlLoader.load(getClass().getResource("scn1.fxml").openStream());
Controller cont = (Controller) fxmlLoader.getController();
cont.addData(content);
}
そのため、シーン 2 の Add-Data-Button をクリックすると、トリガーされたメソッドが入力されたデータをシーン 1 のコントローラーに渡します。これは、新しいデータがシーン 1 に表示されるためです。
ロジックが機能しないように感じます(ここで編集)。
System.out.println(parentBox.getChildren().size();
データが追加される前と後では、もう 1 つ必要な場合でも、常に 1 つの子が存在します...
String-Array を人為的に埋めて、すべてを addData to(String s) から Initialize(...) に移動すると、機能し、データは親 VBox に VBox として表示されます。
コントローラーのロードとシーンの変更は問題にならないため、メイン クラスは投稿しませんでした。
皆様、大変お世話になりました!:)