【问题标题】:How to detect a selection on JavaFX TableView when clicking a highlighted item?单击突出显示的项目时如何检测JavaFX TableView上的选择?
【发布时间】:2016-11-24 08:15:47
【问题描述】:

每次用户在 TableView 上选择一个项目时,我都需要一种方法来获取用户选择,即使该项目已经被选中。

tableView.getSelectionModel().selectedItemProperty().addListener 在用户从突出显示的项目中选择不同 项时起作用,但如果用户再次选择突出显示的项目,它似乎不起作用。

如何解决这个问题?

【问题讨论】:

    标签: java user-interface javafx tableview


    【解决方案1】:

    你可以这样做:

    tableView.setOnMouseClicked((MouseEvent event) -> {
            if(event.getButton().equals(MouseButton.PRIMARY)){
                System.out.println(tableView.getSelectionModel().getSelectedItem());
            }
        });
    

    如果您使用可编辑的表格单元格再次选择突出显示的项目,上述代码将不起作用

    【讨论】:

      【解决方案2】:

      如果您只对行上的点击感兴趣,请使用自定义rowFactory:

      TableView<Item> table = ...
      EventHandler<MouseEvent> clickListener = evt -> {
          TableRow<Item> row = (TableRow<Item>) evt.getTarget();
          if (!row.isEmpty()) {
              // do something for non-empty rows
              System.out.println("you clicked " + row.getItem());
          }
      };
      
      table.setRowFactory(tv -> {
          TableRow<Item> row = new TableRow<>();
      
          // add click listener to row
          row.setOnMouseClicked(clickListener);
      
          return row;
      });
      

      【讨论】:

        【解决方案3】:

        我所知道的最简单的方法:

         yourTableView.setOnMousePressed(e ->{
                        if (e.getClickCount() == 2 && e.isPrimaryButtonDown() ){
                            int index = yourTableView.getSelectionModel().getSelectedIndex();
                            System.out.println("" + index);
                        }
                    });
        

        将它放入您的corntroller类中的构造函数或初始化方法... :)

        【讨论】:

          猜你喜欢
          • 2016-04-29
          • 1970-01-01
          • 2018-10-31
          • 2012-09-12
          • 2014-06-30
          • 1970-01-01
          • 2021-02-03
          • 2012-07-19
          • 1970-01-01
          相关资源
          最近更新 更多