我在一个可观察列表中有几个复制的元素,用于在 TableView 中进行复制/粘贴操作。表的名称是cpTable(复制和粘贴表),用于存储复制的元素和粘贴存储在表中的元素。每次粘贴操作后,我想在使用 Ctrl+C 复制其他选定项目之前清除 cpTable 的内容。但我总是得到错误:
JavaFX 应用程序线程“java.lang.UnsupportedOperationException:不支持。
在 com.sun.javafx.scene.control.ReadOnlyUnbackedObservableList.remove(ReadOnlyUnbackedObservableList.java:246)
这是我的伪代码:
if (cpTable !=null) {
//first, get all copied items for removing all elements
ObservableList<String> copiedItems = cpTable.getItems();
int size = copiedItems.size();
// remove all elements
for(int i=0;i<size;i++) {
copiedItems.remove(i);
}
cpTable.setItems(copiedItems); //clear cpTable by setting an empty list
}
这是一种复制所选项目内容并将其放入 cpTable 的方法
public TableView<String> copySelectionToClipboard(TableView<String> table) {
ObservableList<String> data = table.getSelectionModel().getSelectedItems();
TableView<String> tmp = new TableView<>();
tmp.setItems(data);
return tmp;
}
当按下 Ctrl+C 时,以下行会将所有复制的项目放入 cpTable 中:
cpTable = copySelectionToClipboard( (TableView<String>) keyEvent.getSource());
如前所述,我想在将项目粘贴到表格后立即清除所有 cpTable 内容。