Множественный отбор клеток с помощью muose и копии TableView с использованием JAVAFX

У меня есть TableView который редактируется и множественный выбор включен. Я хочу ввести новые данные в некоторые столбцы и строки. Затем я хочу выбрать с помощью мыши и нажмите CTRL-C скопировать в буфер обмена.

я могу использовать column.setCellFactory (TextFieldTableCell.forTableColumn ()); и мой код хорошо работает для ввода данных, таких как EXCEL. Я не мог выбрать с помощью мыши.

Я прочитал ссылку. Как я могу выделить несколько ячеек в табличном представлении с помощью javafx только мышью?, Если я пытаюсь реализовать это, мне нужно использовать

final Callback<TableColumn<MyDataClass, String>, TableCell<MyDataClass, String>> myCellFactory = new DragSelectionCellFactory (); column.setCellFactory (myCellFactory);,

Тогда я не могу ввести какие-либо данные, так как CellFactory теперь другой..

Как я могу ввести данные, такие как EXCEL, а также выбрать мышь и использовать CTRL-C копировать? Спасибо за любую помощь.

1 ответ

Решение

Вы можете реорганизовать код в указанной вами ссылке, чтобы он ссылался на другую фабрику ячеек и "украшал" ячейки с помощью функции перетаскивания:

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()));
Другие вопросы по тегам