在 javafx UI 中已经存在的 HBox 中动态添加循环中的按钮

Add buttons in a loop dynamically in HBox which is already present in javafx UI

我通过单击一个按钮从数据库 table 中获取行数,并根据计数在 HBOX 中添加按钮,这些按钮已经存在于 UI .该循环 运行 很好,但我的问题是只有一个按钮,循环中的最后一个条目被添加到 ui .

点击按钮调用的函数是:

  @FXML
 public void goToProjectUpdateScreen(ActionEvent event) {

         Session session = NewHibernateUtil.opensession();
        session.beginTransaction();

       Query queryResult = session.createQuery("from Project where RegistrationId= 3");

  java.util.List allUsers;
  allUsers = queryResult.list();
  for (int i = 0; i < allUsers.size(); i++) {
             try {
                 Project project = (Project) allUsers.get(i);
                 Button button = new Button();
                 button.setOnMouseClicked((MouseEvent t) ->
        {
            System.out.println(button.getId());

        });
                 button.setText(project.getProjectname());
                 button.setId(Integer.toString(project.getProjectid()));

   showProjectUpdateDialog(button,project.getProjectname());

           } catch (IOException ex) {
                 Logger.getLogger(NewProjectScreenController.class.getName()).log(Level.SEVERE, null, ex);
             }

  }



        session.getTransaction().commit();
        session.close();

    }
   public void showProjectUpdateDialog(Button button,String buttonname) throws IOException {
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("ProjectUpdateScreen.fxml"));
        Parent root = (Parent) fxmlLoader.load();
        ProjectUpdateScreenController controller = fxmlLoader.<ProjectUpdateScreenController>getController();
        controller.setButton(button,buttonname);
        fxmlLoader.setController(button);
        MainController.parentWindow.getScene().setRoot(root);
    }

项目更新屏幕中的 SetButton 函数:

 @FXML
      public HBox projectlist;

    public  void setButton(Button button ,String buttonname) {

    projectlist.setSpacing(10);

projectlist.getChildren().add(button);


    }

有人能给我解释一下吗???

您只能加载一次 fxml。目前每次加一个按钮都要加载,设置为root,所以最后一个就是剩下的一个。