允许用户从TableView复制数据

cla*_*lay 6 javafx javafx-2 javafx-8

我有一个简单的JavaFX应用程序,允许用户查询数据库并查看表中的数据.

我想让用户能够单击一个表格单元格并使用标准剪贴板键击将该单元格中的文本复制到剪贴板:适用于Win/Linux的ctrl-c或适用于Mac的cmd-c.仅供参考,文本输入控件默认支持基本复制/粘贴.

我正在使用标准的javafx.scene.control.TableView类.有没有一种简单的方法来启用单元格复制?我做了一些搜索,我看到其他人创建自定义菜单命令...我不想创建自定义菜单,我只想要基本的键盘复制来处理单个单元格.

我正在使用单一选择模式,但如果需要,我可以更改为其他内容:

    TableView<Document> tableView = new TableView<Document>();
    tableView.getSelectionModel().setCellSelectionEnabled(true);
    tableView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
Run Code Online (Sandbox Code Playgroud)

Man*_*eli 4

您只需在场景中创建一个侦听器,例如:

scene.getAccelerators()
.put(new KeyCodeCombination(KeyCode.C, KeyCombination.CONTROL_ANY), new Runnable() {
    @Override
    public void run() {
        int row = table.getSelectionModel().getSelectedIndex();
        DataRow tmp = table.getItems().get(row);
        final Clipboard clipboard = Clipboard.getSystemClipboard();
        final ClipboardContent content = new ClipboardContent();
        if(table.getSelectionModel().isSelected(row, numColumn)){
            System.out.println(tmp.getNumSlices());
            content.putString(tmp.getNumSlices().toString());
        }
        else{
            System.out.println(tmp.getSelected());
            content.putString(tmp.getSelected());
        }
        clipboard.setContent(content);
    }
});
Run Code Online (Sandbox Code Playgroud)

如需完整示例,您可以在gist处下载。