¿Es posible permitir que un usuario seleccione filas y copie desde un TableView?JavaFX TableView copia al portapapeles
Respuesta
No estoy seguro, pero supongo que javafx.scene.input.Clipboard puede ayudarlo aquí.
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);
no podía aplicar respuesta de Yelliver, no compila para mí, pero he encontrado otra manera muy clara para extraer al portapapeles múltiples datos seleccionados del TableView, que va de la siguiente
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);
}
Espero que pueda ayudarlo, o cualquier persona que intente copiar fácilmente los datos de TableView
La solución de yelliver solo copia el contenido de las celdas seleccionadas, pero aparentemente solo las celdas que fueron cliqueadas explícitamente se consideran seleccionadas. La solución de Roberto solo funciona si los objetos contenidos en la tabla son iterables. Aquí es una solución general que copia los datos de todas las células en todas las filas seleccionadas:
@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);
}
Para habilitar la copia con Ctrl + C, añadir
final KeyCodeCombination keyCodeCopy = new KeyCodeCombination(KeyCode.C, KeyCombination.CONTROL_ANY);
table.setOnKeyPressed(event -> {
if (keyCodeCopy.match(event)) {
copySelectionToClipboard(table);
}
});
- 1. Problema de rendimiento JavaFX TableView
- 2. Localización JavaFX 2.x TableView
- 3. Copia de texto al portapapeles utilizando Java
- 4. Javafx: Reordenar una columna en un TableView
- 5. ¿Copia la imagen al portapapeles desde el navegador en Javascript?
- 6. copia de estudio visual al portapapeles IDE se congela
- 7. DataGridView: copia completa en el portapapeles
- 8. Ubuntu> copia del Portapapeles, SSHK
- 9. JavaFX 2 Crear TableView con una sola columna
- 10. ¿Configurando el color de fuente de las celdas JavaFX TableView?
- 11. copia en el portapapeles en Java
- 12. Copiar rango al portapapeles
- 13. VIM: anexar al portapapeles
- 14. Copie las imágenes javascript hechas al portapapeles
- 15. cómo copiar contenido de jtable al portapapeles
- 16. shell script salida al portapapeles
- 17. ¿Cómo puedo configurar el texto para copiar al portapapeles cuando se copia la imagen?
- 18. IOS - detectan cuando se copia el usuario al portapapeles - [UIPasteboard generalPasteboard]
- 19. Agregar UISearchBar al encabezado tableView como subvista
- 20. iPhone Copiar algo al portapapeles a través del código
- 21. Cómo copiar al portapapeles en Emacs Lisp
- 22. ¿Eliminar línea sin agregar al portapapeles?
- 23. Cómo copiar al portapapeles en F #?
- 24. ¿Cómo puede Python acceder al portapapeles X11?
- 25. ¿Cómo copiar al portapapeles con GWT?
- 26. Cómo copiar datos al portapapeles en C#
- 27. No se puede agregar al portapapeles
- 28. Copie la imagen al portapapeles en android
- 29. Cortar archivos al portapapeles en C#
- 30. Copie archivos al portapapeles en C#