Java 标题窗格循环只有最后一个有内容
我正在以编程方式构建fxml 现在,我将一个标题窗格添加到我的手风琴中,在这些标题窗格中,我将内容设置到循环中定义的网格窗格中 结果屏幕显示我添加的所有标题窗格。它显示我设置的标题窗格的标题。但它只显示我添加的最后一个标题窗格的内容 我不明白为什么,因为对标题窗格的引用仍然存在于我制作的arraylist中,而且据我所知,我设置的contentNode保存在那里。看起来row和columnconstraints适用于所有实例,我认为这意味着每个标题窗格都找到了网格,但最后一个没有内容Java 标题窗格循环只有最后一个有内容,java,javafx,controller,fxml,gridpane,Java,Javafx,Controller,Fxml,Gridpane,我正在以编程方式构建fxml 现在,我将一个标题窗格添加到我的手风琴中,在这些标题窗格中,我将内容设置到循环中定义的网格窗格中 结果屏幕显示我添加的所有标题窗格。它显示我设置的标题窗格的标题。但它只显示我添加的最后一个标题窗格的内容 我不明白为什么,因为对标题窗格的引用仍然存在于我制作的arraylist中,而且据我所知,我设置的contentNode保存在那里。看起来row和columnconstraints适用于所有实例,我认为这意味着每个标题窗格都找到了网格,但最后一个没有内容 Publi
Public class FXMLController Implements Initializable {
@FXML private VBox vboxDrills;
//NonFXML
private ArrayList<TitledPane> lsttpDrillList;
private Accordion accDrill;
public void initLayout(ArrayList<Drill> drills){
accDrill = new Accordion();
lsttpDrillList = new ArrayList<>();
TitledPane tpDrill; //AP = AccordionPane
GridPane gpTopDrill;
Accordion accDrillStep;
GridPane gpBottomDrill;
//gpTopDrill
ColumnConstraints cc1gpTopDrill = new ColumnConstraints();
cc1gpTopDrill.setHgrow(Priority.SOMETIMES);
cc1gpTopDrill.setMaxWidth(Double.NEGATIVE_INFINITY);
cc1gpTopDrill.setMinWidth(10.0);
cc1gpTopDrill.setPrefWidth(200.0);
ColumnConstraints cc2gpTopDrill = new ColumnConstraints();
cc2gpTopDrill.setHgrow(Priority.SOMETIMES);
cc2gpTopDrill.setMaxWidth(Double.NEGATIVE_INFINITY);
cc2gpTopDrill.setMinWidth(10.0);
cc2gpTopDrill.setPrefWidth(400.0);
RowConstraints rc1gpTopDrill = new RowConstraints();
rc1gpTopDrill.setMaxHeight(Double.NEGATIVE_INFINITY);
rc1gpTopDrill.setMinHeight(Double.NEGATIVE_INFINITY);
rc1gpTopDrill.setPrefHeight(35.0);
rc1gpTopDrill.setVgrow(Priority.SOMETIMES);
Label lblDrillID = new Label();
lblDrillID.minHeight(Double.NEGATIVE_INFINITY);
lblDrillID.minWidth(Double.NEGATIVE_INFINITY);
lblDrillID.setText("Drill ID:");
Label lblActualID = new Label();
lblActualID.minHeight(Double.NEGATIVE_INFINITY);
lblActualID.minWidth(Double.NEGATIVE_INFINITY);
Label lblDrillTitle = new Label();
lblDrillTitle.setText("Drill Title:");
TextField txtDrillTitleEdit = new TextField();
//end gpTopDrill
for(int i=0; i<drills.size(); i++){
//new instance and title
Drill drill = drills.get(i);
tpDrill = new TitledPane();
if(!drill.getTitle().isEmpty()){
tpDrill.setText(drill.getTitle());
}else{
tpDrill.setText("Drill" + drill.getID());
}
tpDrill.setId("drillPane" + (i));
//gpTopDrill
lblActualID.setText(Integer.toString(drill.getID()));
txtDrillTitleEdit.setId("drillTitleEdit" + (i));
txtDrillTitleEdit.setText(drill.getTitle());
GridPane.setConstraints(lblDrillID, 0, 0);
GridPane.setConstraints(lblActualID, 1, 0);
GridPane.setConstraints(lblDrillTitle, 0, 1);
GridPane.setConstraints(txtDrillTitleEdit, 1, 1);
gpTopDrill = new GridPane();
gpTopDrill.getColumnConstraints().addAll(cc1gpTopDrill, cc2gpTopDrill);
gpTopDrill.getRowConstraints().addAll(rc1gpTopDrill, rc1gpTopDrill);
gpTopDrill.getChildren().addAll(lblDrillID, lblActualID, lblDrillTitle, txtDrillTitleEdit);
//end gpTopDrill
//accDrillStep
//end accDrillStep
//gpBottomDrill
//end gpBottomDrill
//put VBox in drillpane
tpDrill.setContent(gpTopDrill);
lsttpDrillList.add(tpDrill);
}
accDrill.getPanes().setAll(lsttpDrillList);
accDrill.layoutXProperty().set(8.0);
accDrill.layoutYProperty().set(7.0);
accDrill.setExpandedPane(lsttpDrillList.get(0));
vboxDrills.getChildren().add(0, accDrill);
}
...
}
当然,您希望在循环的每个迭代中创建一个新的标题窗格,而不是只创建一个标题窗格并在每个迭代中重新配置它?是的,这实际上是我应该做的:O。谢谢。但是为什么它们是空白的,而不是看起来像第三个呢?因为你在标签上犯了同样的错误;重新配置它们并将同一标签添加到所有标题窗格。由于控件只能在同一场景图中出现一次,因此只能在添加控件的最后一个位置看到它们。