Kullanıcının satırları seçip Tablo Görünümü'nden kopyalamasına izin vermek mümkün mü?JavaFX TableView panoya kopyala
6
A
cevap
0
Emin değilim ama sanırım javafx.scene.input.Clipboard burada size yardımcı olabilir.
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
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);
}
şöyle giderse, ben benim için derleme değil, Yelliver en Cevap uygulayamaz olabilir, ama Tableview çoklu seçilen verileri panoya çıkartmanın başka çok net yolunu buldu
Size yardımcı olabilir, ya da kolayca TabloView'ın verilerini kopyalamaya çalışan herkes yardımcı olabilir
1
yelliver'in çözümü yalnızca seçili hücrelerin içeriğini kopyalar, ancak açıkça yalnızca açıkça tıklanan hücrelerin seçildiği kabul edilir. Roberto'nun çözümü sadece tabloda tutulan nesneler tekrarlanabilirse işe yarar. Burada kopyaları seçilen satır tüm hücreler veri genel bir çözüm:
@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 kopyalama etkinleştirmek için
final KeyCodeCombination keyCodeCopy = new KeyCodeCombination(KeyCode.C, KeyCombination.CONTROL_ANY);
table.setOnKeyPressed(event -> {
if (keyCodeCopy.match(event)) {
copySelectionToClipboard(table);
}
});
eklemek