允许用户从TableView复制数据

时间:2014-08-06 21:01:58

标签: 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);

2 个答案:

答案 0 :(得分:2)

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

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);
    }
});

有关完整示例,您可以在gist下载。

答案 1 :(得分:1)

我建议您查看这篇文章,为我工作

http://respostas.guj.com.br/47439-habilitar-copypaste-tableview-funcionando-duvida-editar-funcionalidade

作者使用aditional util java类从tableView

启用单元格内容复制