SWT:具有复制/粘贴功能的表

时间:2011-09-19 13:36:58

标签: java swt

这可能是一个非常愚蠢的问题,但我无法在任何地方找到答案,是否有任何方法让用户能够突出显示SWT表中的行并且 ctrl + c 右键单击 + c 复制值?

我特别希望能够复制到Excel工作表中。

这是我创建表格的方式,

Table aTable = new Table(parent, SWT.SINGLE | SWT.BORDER
                | SWT.FULL_SELECTION);
aTable.setHeaderVisible(true);
aTable.setLinesVisible(true);

aTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

我已经看到有关使用JTable的信息,但没有使用SWT。如果JTable是我唯一的选择,那么使用它们的优势是什么?

2 个答案:

答案 0 :(得分:5)

您可以轻松编写代码。

向表中添加一个键监听器并侦听 Ctrl + C 键。当命中 Ctrl + C 时,从表中获取选择,从每个TableItem中提取文本并形成制表符分隔字段/换行分隔行String包含您的数据。然后将其放入剪贴板(请参阅org.eclipse.swt.dnd.Clipboard#setContents,使用TextTransfer数据类型)。

就是这样 - 你的结果可以粘贴到Excel中。

答案 1 :(得分:0)

可接受的答案很好,但是由于开发人员更喜欢代码段而不是文本,因此我将以这种方式回答问题:

aTable.addKeyListener(new KeyAdapter() {
    @Override
    public void keyPressed(KeyEvent e) {
        if (e.stateMask == SWT.CTRL && (e.keyCode == 'c' || e.keyCode == 'C')) {
            Clipboard clipboard = new Clipboard(Display.getDefault());
            clipboard.setContents(new Object[] { getTextFromSelectedRows() }, new Transfer[] { TextTransfer.getInstance() });
            clipboard.dispose();
        }
    }
});

然后只需实现一个getTextFromSelectedRows()-基于表选择的方法-返回应添加到剪贴板的String