在Java中,剪切、复制和粘贴的最佳方法是什么?

4

我使用Swing创建了一个带有文本区域(JTextArea)的应用程序。我想创建一个"编辑"菜单,其中包括从文本区域剪切和复制文本以及从剪贴板粘贴到文本区域的选项。

我看到了一些实现方法,但我想知道最佳的方法是什么。如何实现剪切/复制/粘贴?


2
"我看过几种方法,它们是什么?但我想知道最好的方法是什么。" a) 定义“最好”(最快、最简单、配备桶座和GPS作为标准,...)b) 为什么不说出您认为最好的方法以及您认为如此的原因? - Andrew Thompson
Ctrl + X / Ctrl + C / Ctrl + V。 - HashimR
2个回答

15

我个人会选择重复使用标准的剪切、复制和粘贴操作。这在Swing拖放教程:添加剪切、复制和粘贴中都有详细解释。关于文本组件部分对你来说最相关。以下是该页面的一些代码示例:

menuItem = new JMenuItem(new DefaultEditorKit.CopyAction());
menuItem.setText("Copy");
menuItem.setMnemonic(KeyEvent.VK_C);

如果你不想/不需要拥有菜单项怎么办?我该如何将 DefaultEditorKit.CopyAction() 附加到 JTextPane 上? - posdef
@posdef 你可以使用键绑定机制将动作附加到组件上。 - Robin

5
基本上,复制到剪贴板使用了DefaultToolkit的StringSelection和ClipBoard。
StringSelection ss = new StringSelection(textarea.getText());
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss,this);

并且
Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(this);

    try {
        if (t != null && t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
            String text = (String)t.getTransferData(DataFlavor.stringFlavor);
            return text;
        }
    } catch (UnsupportedFlavorException e) {
    } catch (IOException e) {
    }
    return null;

如Andrew所指出的那样,您可以知道您已经看到了哪些其他方法。如果您正在寻找从/到您的应用程序和其他应用程序的剪切/复制/粘贴,则必须使用系统剪贴板。如果复制/粘贴特定于您的应用程序,则可以实现自己的创建和维护缓冲区的方法,但是使用系统剪贴板方法将是最简单的方法,因为您不必重新发明轮子。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接