Est-il possible de permettre à un utilisateur de sélectionner des lignes et de copier à partir d'un TableView?JavaFX TableView copier dans le presse-papiers
Répondre
Je ne suis pas sûr, mais je suppose que javafx.scene.input.Clipboard peut vous aider ici.
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);
Je ne pouvais pas mettre en œuvre la réponse de Yelliver, il ne compile pas pour moi, mais je l'ai trouvé une autre façon très claire pour extraire le presse-papiers multiples données sélectionnées du tableView, il se présente comme suit
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);
}
Espérons que cela puisse vous aider, ou quiconque essayant de copier facilement les données de TableView
La solution de yelliver copie seulement le contenu des cellules sélectionnées, mais apparemment seules les cellules sur lesquelles on a cliqué explicitement sont considérées comme sélectionnées. La solution de Roberto ne fonctionne que si les objets contenus dans la table sont itérables. Voici une solution générale qui copie les données de toutes les cellules de toutes les lignes sélectionnées:
@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);
}
Pour activer la copie avec Ctrl + C, ajouter
final KeyCodeCombination keyCodeCopy = new KeyCodeCombination(KeyCode.C, KeyCombination.CONTROL_ANY);
table.setOnKeyPressed(event -> {
if (keyCodeCopy.match(event)) {
copySelectionToClipboard(table);
}
});
- 1. Propriétés JavaFX dans TableView
- 2. CheckBox centré dans TableView JavaFX
- 3. Sélection multiple dans tableView javafx
- 4. Sliding Down TableView dans JavaFx
- 5. JavaFX: Message TableView vide
- 6. Actualiser périodiquement JavaFX TableView
- 7. JavaFX sections tableView
- 8. JavaFX TableView delete issue
- 9. JavaFX Liaison TableView-TextField
- 10. JavaFx Erreur TableView
- 11. JavaFX TableView EnsureVisible
- 12. Insertion TableView JavaFX
- 13. JavaFx lier le modèle d'entité à TableView
- 14. SimpleStringProperty et SimpleIntegerProperty TableView JavaFX
- 15. JavaFX: comment "repeindre" une tableview
- 16. Filtre multiple avec TableView dans javafx
- 17. Sélection du paramètre JavaFX dans un TableView
- 18. javafx cases à cocher dans tableview
- 19. Menu contextuel dans TableView JAVAFX 2.1
- 20. JavaFX masquer le texte de la colonne dans tableview
- 21. JavaFX TableView ne met pas à jour
- 22. Remplissage TableView en JavaFX avec TableView créé en FXML Fichier
- 23. JavaFX TableView modifiable avec des objets
- 24. javafx tableview table de redimensionnement problème
- 25. copier du texte dans tableview (swift)
- 26. JavaFX TableView - Réinitialisation des tris de colonnes
- 27. JavaFX 2.1 remplacer les données de tableview
- 28. JavaFx Sélection de perte de ligne TableView
- 29. javafx tableview - ne peut pas être édité
- 30. Les colonnes JavaFX TableView correspondent au contenu