Uitableview 使用muose选择多个单元格并使用JAVAFX复制TableView

Uitableview 使用muose选择多个单元格并使用JAVAFX复制TableView,uitableview,javafx,mouseevent,mouselistener,tablecolumn,Uitableview,Javafx,Mouseevent,Mouselistener,Tablecolumn,我有一个TableView,它是可编辑的,并且启用了多选功能。我希望在某些列和行中输入新数据。然后我想用鼠标选择并按CTRL-C复制到剪贴板 我可以使用column.setCellFactory TextFieldTableCell.forTableColumn;我的代码可以很好地输入EXCEL之类的数据。我无法使用鼠标进行选择 我读了参考资料。如果我试图实现它,我需要使用 最终回调myCellFactory=新的DragSelectionCellFactory; column.setCellF

我有一个TableView,它是可编辑的,并且启用了多选功能。我希望在某些列和行中输入新数据。然后我想用鼠标选择并按CTRL-C复制到剪贴板

我可以使用column.setCellFactory TextFieldTableCell.forTableColumn;我的代码可以很好地输入EXCEL之类的数据。我无法使用鼠标进行选择

我读了参考资料。如果我试图实现它,我需要使用

最终回调myCellFactory=新的DragSelectionCellFactory; column.setCellFactory myCellFactory

然后我无法输入任何数据,因为CellFactory现在不同了


如何输入EXCEL等数据并选择鼠标并使用CTRL-C进行复制?感谢您的帮助。

您可以重构所提供链接中的代码,使其引用另一个单元格工厂,并使用拖动功能装饰单元格:

public class DragSelectionCellFactory<S,T> implements Callback<TableColumn<S,T>, TableCell<S,T>> {

    private final Callback<TableColumn<S,T>, TableCell<S,T>> factory ;

    public DragSelectionCellFactory(Callback<TableColumn<S,T>, TableCell<S,T>> factory) {
        this.factory = factory ;
    }

    public DragSelectionCellFactory() {
        this(col -> new TableCell<S,T>() {
            @Override
            protected void updateItem(T item, boolean empty) {
                super.updateItem(item, empty);
                if (empty || item == null) {
                    setText(null);
                } else {
                    setText(item.toString());
                }
            }
        });
    }

    @Override  
    public TableCell<S,T> call(final TableColumn<S,T> col) {            
        TableCell<S,T> cell = factory.call(col);  
        cell.setOnDragDetected(event ->  {  
            cell.startFullDrag();  
            col.getTableView().getSelectionModel().select(cell.getIndex(), col);  
        });  
        cell.setOnMouseDragEntered(event -> {  
            col.getTableView().getSelectionModel().select(cell.getIndex(), col);  
        });
        return cell ;  
    }  

} 
那你就可以了

TableColumn<Person, String> column = ... 
column.setCellFactory(
    new DragSelectionCellFactory<Person, String>(TextFieldTableCell.forTableColumn()));

试试这个:@negste,谢谢。我看过那篇文章。我正在搜索选择细胞的鼠标激活。谢谢你的想法。我试过了。它给出了一些错误DragSelectionCellFactory不接受参数。@vegaonline对我来说很好。准确地说,您得到的错误是什么?它说DragSelectionCellFactory不接受参数。代码正在使用公共DragSelectionCellFactory{构造函数,而不是带有回调的函数?我是否应该在列.setCellFactory…;?之前的调用方代码中定义回调函数`private final Callback factory;`?DragSelectionCellFactory显然接受了一个参数不清楚编译器是在抱怨构造函数参数还是类型参数r、 但这两者都需要。因此编译器不知何故没有看到你的新版本DragSelectionCellFactory:也许你没有保存它,或者你导入了错误的版本?再次,我测试了这个,它工作得很好。我亲爱的尊敬的James,我很感谢你。它没有保存。非常感谢你关心和指导像我这样的初学者。