在 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,所以最后一个就是剩下的一个。
我通过单击一个按钮从数据库 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,所以最后一个就是剩下的一个。