使用 JAVAFX 使用 muose 和 TableView 的副本多选单元格
Multiselection of cells with muose and copy of TableView using JAVAFX
我有一个 TableView
是可编辑的并且启用了多个 selection。我希望向某些列和行输入新数据。然后我想 select 使用鼠标并按 CTRL-C
复制到剪贴板。
我可以使用 column.setCellFactory (TextFieldTableCell.forTableColumn ());
,而且我的代码可以很好地输入 EXCEL 等数据。我不能 select 使用鼠标。
我阅读了参考资料 How can I select multiple cells in tableview with javafx only by mouse?。如果我尝试实现它,我需要使用
final Callback<TableColumn<MyDataClass, String>, TableCell<MyDataClass, String>> myCellFactory = new DragSelectionCellFactory ();
column.setCellFactory (myCellFactory);
。
然后我无法输入任何数据,因为 CellFactory 现在不同了..
我如何输入EXCEL和select鼠标等数据并使用CTRL-C
复制?感谢您的帮助。
您可以重构您提供的 link 中的代码,以便它引用另一个单元格工厂,并且 "decorates" 具有拖动功能的单元格:
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()));
我有一个 TableView
是可编辑的并且启用了多个 selection。我希望向某些列和行输入新数据。然后我想 select 使用鼠标并按 CTRL-C
复制到剪贴板。
我可以使用 column.setCellFactory (TextFieldTableCell.forTableColumn ());
,而且我的代码可以很好地输入 EXCEL 等数据。我不能 select 使用鼠标。
我阅读了参考资料 How can I select multiple cells in tableview with javafx only by mouse?。如果我尝试实现它,我需要使用
final Callback<TableColumn<MyDataClass, String>, TableCell<MyDataClass, String>> myCellFactory = new DragSelectionCellFactory ();
column.setCellFactory (myCellFactory);
。
然后我无法输入任何数据,因为 CellFactory 现在不同了..
我如何输入EXCEL和select鼠标等数据并使用CTRL-C
复制?感谢您的帮助。
您可以重构您提供的 link 中的代码,以便它引用另一个单元格工厂,并且 "decorates" 具有拖动功能的单元格:
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()));