Множественный отбор клеток с помощью 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()));