13

ユーザーが行を選択して TableView からコピーできるようにすることは可能ですか?

4

4 に答える 4

15
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);
于 2013-02-01T09:11:50.543 に答える
4

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のデータを簡単にコピーしようとしている人に役立つことを願っています

于 2014-08-05T18:50:58.087 に答える
-1

よくわかりませんが、javafx.scene.input.Clipboardがここで役立つと思います。

于 2012-07-07T23:31:44.133 に答える