Множественный выбор ячеек с помощью 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 для копирования? Спасибо за любую помощь.


person vegaonline    schedule 07.04.2017    source источник
comment
попробуйте это: ссылка   -  person negste    schedule 07.04.2017
comment
@negste, спасибо. Я видел этот пост. Я ищу активацию мыши для выбора ячеек.   -  person vegaonline    schedule 07.04.2017


Ответы (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()));
person James_D    schedule 07.04.2017
comment
Спасибо за идею. Я попытался. Выдает какую-то ошибку DragSelectionCellFactory не принимает параметр. - person vegaonline; 07.04.2017
comment
@vegaonline отлично сработал для меня. Какую именно ошибку вы получили? - person James_D; 07.04.2017
comment
Там написано, что DragSelectionCellFactory does not take parameter. Код принимает конструктор public DragSelectionCellFactory() {, а не тот, что с обратным вызовом? Должен ли я определять материалы обратного вызова `private final Callback‹TableColumn‹S,T›, TableCell‹S,T›› factory;` в коде вызывающего объекта непосредственно перед column.setCellFactory(...);? - person vegaonline; 08.04.2017
comment
Ну, DragSelectionCellFactory явно принимает параметр (неясно, имеете ли вы в виду, что компилятор жалуется на параметр конструктора или параметр типа, но он принимает оба). Значит, компилятор почему-то не видит вашу новую версию DragSelectionCellFactory: может, вы ее не сохранили, а может, у вас импортирована не та версия? Опять же, я проверил это, и это сработало просто отлично. - person James_D; 08.04.2017
comment
Мой дорогой и уважаемый Джеймс, я благодарен вам. это не сохранилось. Большое спасибо за заботу и руководство таким новичком, как я. - person vegaonline; 08.04.2017