java - 检测双击 TableView JavaFX 的单元格

标签 java javafx mouseevent double-click

我正在尝试检测对表格 View 的随机单元格的双击。 双击的检测不是问题,而是双击了哪个单元格。

table.addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            if (event.getClickCount() > 1) {
                System.out.println("double clicked!");
                TableCell c =  (TableCell) event.getSource();
                System.out.println("Cell text: " + c.getText());
            }
        }
    });

这就是我构建表格的方式:

private void BuildTable() throws Exception
{
    /*Some initialisations etc*/

        for(int i=0; i<result.getMetaData().getColumnCount();i++)
        {
            final int j = i;
            TableColumn col = new TableColumn(result.getMetaData().getColumnName(i+1));
            col.setCellValueFactory(new Callback<CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){
                public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param)
                {
                    return new SimpleStringProperty(param.getValue().get(j).toString());
                }
            });
            table.getColumns().addAll(col);


        }
        while(result.next()){
            ObservableList<String> row = FXCollections.observableArrayList();
            for(int i = 1; i<=result.getMetaData().getColumnCount();i++){
                row.add(result.getString(i));
            }
            data.add(row);
        }
        table.setItems(data);
    }catch(Exception e){
        e.printStackTrace();
    }

}

这里真正的问题是我不能直接转换为 TableCell。 有人可以帮我吗?我将不胜感激。

最佳答案

您需要向表格单元格本身注册处理程序,而不是向表格注册处理程序。为此,请在适当的 TableColumn(s) 上使用单元工厂。

例如,将以下代码添加到 standard table example ( list 13.6)。

firstNameCol.setCellFactory(new Callback<TableColumn<Person, String>, TableCell<Person, String>>() {
    @Override
    public TableCell<Person, String> call(TableColumn<Person, String> col) {
        final TableCell<Person, String> cell = new TableCell<Person, String>() {
            @Override
            public void updateItem(String firstName, boolean empty) {
                super.updateItem(firstName, empty);
                if (empty) {
                    setText(null);
                } else {
                    setText(firstName);
                }
            }
         };
         cell.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
             @Override
             public void handle(MouseEvent event) {
                 if (event.getClickCount() > 1) {
                     System.out.println("double click on "+cell.getItem());
                 }
             }
         });
         return cell ;
    }
});

关于java - 检测双击 TableView JavaFX 的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23998082/

相关文章:

java - 无法在 JavaFX 中移动矩形?

javascript - 我可以禁用与 Canvas 的每个鼠标交互以与底层对象交互吗?

qt - View 中的 MousePressEvent 和 Qt 中的项目

java - Java/WebLogic 应用程序中的集成 Windows 身份验证 (NTLM)?

java - Java JVM 的 HTTP 代理设置

java - 无法在 Raspberry Pi 3(Raspbian) 上运行我的 JavaFX jar 文件

java - 有没有办法从 FXML Controller 获取舞台?

java - 在 Java 中单击时尝试删除屏幕上的对象不起作用

java - 使用Java验证WebDriver中DOB字段的闰年

Java JNDI - 在 Microsoft LDAP 中更改用户密码时的限制 - 身份验证异常