GridPane JavaFX-8上的鼠标单击事件

时间:2017-03-20 07:14:04

标签: java mouseevent javafx-8 gridpane

解决方案可能是盯着我的脸。但这是我的问题。

看看这个方法:

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的原因。为什么我的听众不工作?

我是初学者。我知道方法很乱。我知道我需要重构一些事情。但是,只要我能够让它发挥作用,我会很乐意在事后清理它。感谢任何帮助,谢谢。

0 个答案:

没有答案