JavaFX:如何定位 VBox 中程序添加的行?
JavaFX: how do you target procedurally added rows in a VBox?
所以,我想开始操作 VBox 中的元素。我正在使用加载到 fxml 行中的 for 循环按程序添加它们。
public void scoreRows() {
AtomicInteger rows = new AtomicInteger(1);
for (int i = 0; i <= 10; i++) {
if (rows.get() <=10) {
HBox scoreCellRow = null;
try {
scoreCellRow = FXMLLoader.load(getClass().getResource("/views/score_cell.fxml"));
rowHolder.getChildren().add(scoreCellRow);
} catch (IOException e) {
e.printStackTrace();
}
} else {
System.out.println("No more rows");
}
}
}
据我了解,每次添加一行时都会实例化一个新控制器。所以我想知道如何找到这些元素来定位它们。例如,如果我想通过更改 HBox fx:id cellHolder 来更改每隔一行的背景颜色怎么办?或者,如果我想将每行第一个框中的文本更改为顺序标签 fx:id roundNum?
怎么办?
事实证明,您真正需要的只有 3 样东西。
放置对象的地方
一个FXMLLoader并获取目录
对象和它的控制器在一起
//这里是放置对象的地方
HBox scoreCellRow = null;
try {
//This is the FXMLLoader pointing to the directory
FXMLLoader loader = new FXMLLoader(getClass().getResource("/views/score_cell.fxml"));
//Now we can use the Loader that I named "loader" to load the fxml and get the controller
scoreCellRow = loader.load();
rowHolder.getChildren().add(scoreCellRow);
ScoreCellCtrl scoreCellCtrl = loader.getController();
//Once it's set up changing things as they are added is easy
scoreCellCtrl.setRoundNum(String.valueOf(adjustedRnd));
if (adjustedRnd % 2 == 0) {
scoreCellCtrl.getCellHolder().setStyle("-fx-background-color:#ffe89e;");
}
} catch (IOException e) {
e.printStackTrace();
}
** adjustedRnd 是一个整数,我将它与 for 循环一起使用以正确标记行,调整我想在两轮之间插入的任何内容。
所以,我想开始操作 VBox 中的元素。我正在使用加载到 fxml 行中的 for 循环按程序添加它们。
public void scoreRows() {
AtomicInteger rows = new AtomicInteger(1);
for (int i = 0; i <= 10; i++) {
if (rows.get() <=10) {
HBox scoreCellRow = null;
try {
scoreCellRow = FXMLLoader.load(getClass().getResource("/views/score_cell.fxml"));
rowHolder.getChildren().add(scoreCellRow);
} catch (IOException e) {
e.printStackTrace();
}
} else {
System.out.println("No more rows");
}
}
}
据我了解,每次添加一行时都会实例化一个新控制器。所以我想知道如何找到这些元素来定位它们。例如,如果我想通过更改 HBox fx:id cellHolder 来更改每隔一行的背景颜色怎么办?或者,如果我想将每行第一个框中的文本更改为顺序标签 fx:id roundNum?
怎么办?事实证明,您真正需要的只有 3 样东西。
放置对象的地方
一个FXMLLoader并获取目录
对象和它的控制器在一起
//这里是放置对象的地方 HBox scoreCellRow = null;
try { //This is the FXMLLoader pointing to the directory FXMLLoader loader = new FXMLLoader(getClass().getResource("/views/score_cell.fxml")); //Now we can use the Loader that I named "loader" to load the fxml and get the controller scoreCellRow = loader.load(); rowHolder.getChildren().add(scoreCellRow); ScoreCellCtrl scoreCellCtrl = loader.getController(); //Once it's set up changing things as they are added is easy scoreCellCtrl.setRoundNum(String.valueOf(adjustedRnd)); if (adjustedRnd % 2 == 0) { scoreCellCtrl.getCellHolder().setStyle("-fx-background-color:#ffe89e;"); } } catch (IOException e) { e.printStackTrace(); }
** adjustedRnd 是一个整数,我将它与 for 循环一起使用以正确标记行,调整我想在两轮之间插入的任何内容。