解决方案可能是盯着我的脸。但这是我的问题。
看看这个方法:
public void showUserData() {
int numUsers = usersModel.numberOfUsers(); // number of users(rows) in the database
ColumnConstraints column1 = new ColumnConstraints();
column1.setPercentWidth(40);
ColumnConstraints column2 = new ColumnConstraints();
column2.setPercentWidth(60);
int counter = 0;
for(int i = 0; i <= numUsers - 1; i++) {
subGrid = new GridPane();
subGrid.getColumnConstraints().addAll(column1, column2);
userImage = new ImageView();
subGrid.setStyle("-fx-background-color: #dddddd;");
subGrid.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
System.out.println("mouse click detected! " + mouseEvent.getSource());
subGrid.setStyle("-fx-background-color: blue;");
}
});
vbox = new VBox();
vbox.getChildren().add(new Label("Name: " + getUserData().get(counter)));
vbox.getChildren().add(new Label("Username: " + getUserData().get(counter + 1)));
vbox.getChildren().add(new Label("Position: " + getUserData().get(counter + 2)));
subGrid.add(vbox, 1, 0);
user = new Image("file:///" + getUserImage().get(i));
userImage.setFitWidth(150);
userImage.setFitHeight(150);
userImage.setSmooth(true);
userImage.setPreserveRatio(true);
userImage.setImage(user);
subGrid.add(userImage, 0, 0);
if(i % 2 == 0 && i == 0) {
mainGrid.add(subGrid, 0, 0);
} else if (i % 2 == 0 && i != 0){
mainGrid.add(subGrid, 0, i - 1);
} else {
mainGrid.add(subGrid, 1, i - 1);
}
scroll.setContent(mainGrid);
counter = counter + 3;
}
}
我知道它一团糟但是听我说。我有一个ScrollPane,里面是一个跨越ScrollPane整个区域的GridPane。在GridPane的每个单元格中,还有另一个较小的GridPane。在每个较小的GridPanes中,左列是ImageView,右边是带有标签的VBox。
这种方法的长期和短期是:
一个。它需要数据库中的行数。
湾它为数据库中的每一行创建一个subGrid(对应于表中的用户数)。
℃。它为每个subGrids创建了ImageViews和VBox,并将它们添加到其中。
d。然后它接受subGrids并将其添加到mainGrid。
此过程有效。但是监听器只适用于添加的最新子网格。即第二个子网格亮起,第一个没有,第三个子网格亮起,第二个不亮等等。
我不确定TableView是否可以使用它。这就是我首先尝试使用GridPane的原因。为什么我的听众不工作?
我是初学者。我知道方法很乱。我知道我需要重构一些事情。但是,只要我能够让它发挥作用,我会很乐意在事后清理它。感谢任何帮助,谢谢。