是否可以允許用戶選擇行並從TableView中複製?JavaFX TableView複製到剪貼板
6
A
回答
0
我不知道,但我猜javafx.scene.input.Clipboard可以幫助你在這裏。
9
tableView.getSelectionModel().setCellSelectionEnabled(true);
tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
MenuItem item = new MenuItem("Copy");
item.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
ObservableList<TablePosition> posList = tableView.getSelectionModel().getSelectedCells();
int old_r = -1;
StringBuilder clipboardString = new StringBuilder();
for (TablePosition p : posList) {
int r = p.getRow();
int c = p.getColumn();
Object cell = tableView.getColumns().get(c).getCellData(r);
if (cell == null)
cell = "";
if (old_r == r)
clipboardString.append('\t');
else if (old_r != -1)
clipboardString.append('\n');
clipboardString.append(cell);
old_r = r;
}
final ClipboardContent content = new ClipboardContent();
content.putString(clipboardString.toString());
Clipboard.getSystemClipboard().setContent(content);
}
});
ContextMenu menu = new ContextMenu();
menu.getItems().add(item);
tableView.setContextMenu(menu);
3
我無法實現Yelliver的答案,它不會編譯的我,但我發現了另一個非常明確的方式來解壓到剪貼板中的TableView的多重選擇的數據,這是不言而喻如下
TableView tableView = new TableView();
tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
MenuItem item = new MenuItem("Copy");
item.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
ObservableList rowList = (ObservableList) tableView.getSelectionModel().getSelectedItems();
StringBuilder clipboardString = new StringBuilder();
for (Iterator it = rowList.iterator(); it.hasNext();) {
ObservableList<Object> row = (ObservableList<Object>) it.next();
for (Object cell : row) {
if (cell == null) {
cell = "";
}
clipboardString.append(cell);
clipboardString.append('\t');
}
clipboardString.append('\n');
}
final ClipboardContent content = new ClipboardContent();
content.putString(clipboardString.toString());
Clipboard.getSystemClipboard().setContent(content);
}
});
ContextMenu menu = new ContextMenu();
menu.getItems().add(item);
tableView.setContextMenu(menu);
}
希望它可以幫助你或任何試圖輕易複製TableView數據的人
1
yelliver的解決方案只複製選定單元格的內容,但顯然只有被明確點擊過的單元格才被選中。如果表中的對象是可迭代的,Roberto的解決方案纔有效。 這裏是一個一般的解決方案,拷貝來自所有小區中的所有選擇的行中的數據:
@SuppressWarnings("rawtypes")
public void copySelectionToClipboard(final TableView<?> table) {
final Set<Integer> rows = new TreeSet<>();
for (final TablePosition tablePosition : table.getSelectionModel().getSelectedCells()) {
rows.add(tablePosition.getRow());
}
final StringBuilder strb = new StringBuilder();
boolean firstRow = true;
for (final Integer row : rows) {
if (!firstRow) {
strb.append('\n');
}
firstRow = false;
boolean firstCol = true;
for (final TableColumn<?, ?> column : table.getColumns()) {
if (!firstCol) {
strb.append('\t');
}
firstCol = false;
final Object cellData = column.getCellData(row);
strb.append(cellData == null ? "" : cellData.toString());
}
}
final ClipboardContent clipboardContent = new ClipboardContent();
clipboardContent.putString(strb.toString());
Clipboard.getSystemClipboard().setContent(clipboardContent);
}
爲了使複印用Ctrl + C,添加
final KeyCodeCombination keyCodeCopy = new KeyCodeCombination(KeyCode.C, KeyCombination.CONTROL_ANY);
table.setOnKeyPressed(event -> {
if (keyCodeCopy.match(event)) {
copySelectionToClipboard(table);
}
});
相關問題
- 1. Prism.js複製到剪貼板
- 2. Javascript複製到剪貼板
- 3. Perl複製到剪貼板不能使用剪貼板模塊
- 4. jQuery剪貼板複製
- 5. Javascript複製剪貼板
- 6. Javafx剪貼板雙換行
- 7. 將DataGridView內容複製到剪貼板
- 8. 將內容複製到剪貼板
- 9. 按鈕複製文本到剪貼板
- 10. PyQT - 將文件複製到剪貼板
- 11. Sketch.js將畫布複製到剪貼板
- 12. 將CMD輸出複製到剪貼板
- 13. 複製到剪貼板經典asp
- 14. 將文本複製到剪貼板
- 15. ZeroClipBoard - 將文本複製到剪貼板
- 16. 複製到剪貼板使用Javascript
- 17. 剪貼板將對象複製到
- 18. C#複製透明PNG到剪貼板
- 19. 將圖像複製到剪貼板
- 20. 將userdomain複製到剪貼板錯誤
- 21. 將文件複製到剪貼板
- 22. 複製到基本html的剪貼板
- 23. Android的Firefox webextension複製到剪貼板
- 24. zeroclipboard - 複製到剪貼板不工作
- 25. 結果複製到剪貼板
- 26. 將文件複製到剪貼板Node.JS
- 27. WebBrowser將圖像複製到剪貼板
- 28. 複製到剪貼板中JS
- 29. 將文本複製到剪貼板
- 30. Javascript複製內容到剪貼板