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

问题描述:

我已经创建了一个使用Swing和文本区域(JTextArea)的应用程序。我想创建一个“编辑”菜单,可以从文本区域剪切和复制文本,并将剪贴板中的文本粘贴到文本区域。在Java中剪切,复制和粘贴的最佳方式是什么?

我见过几种方法来做到这一点,但我想知道最好的方法是什么。我应该如何实施剪切/复制/粘贴?

+2

*“我见过几种方法来做到这一点,”*哪些是? *“..但是我想知道最好的方法是什么。”* a)定义'最好'(最快,最简单,有桶座和GPS作为标准,..)b)为什么不说出你认为最好的,你的理由是什么? – 2012-02-03 03:45:36

+0

Ctrl + X/Ctrl + C/Ctrl + V.根据问题的标题回答问题。 :) – HashimR 2012-02-03 05:04:42

我个人会选择重新使用标准的剪切,复制和粘贴操作。这在Swing drag-and-drop tutorial: adding cut, copy and paste中都有解释。关于text components的部分与您最相关。该页面某些代码的快速复制粘贴:

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

+1我认为这是最好的和简单的方法 – 2012-02-03 08:09:02

+0

你不想/需要有菜单项吗?我如何将'DefaultEditorKit.CopyAction()'附加到'JTextPane'? – posdef 2015-11-27 16:38:03

+0

@posdef您可以使用键绑定机制将操作附加到组件 – Robin 2015-11-30 08:56:42

基本上复制到剪贴板使用StringSelection和剪贴板从DefaultToolkit

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; 

安德鲁指出的那样,你可以知道哪些是你所看到的其他方式。如果您正在从应用程序和其他应用程序中寻找剪切/复制/粘贴,则必须使用系统剪贴板。如果复制/粘贴专门在应用程序中,那么您可以实现自己的创建和维护缓冲区的方式,但系统剪贴板方法将是最简单的,因为您不必重新发明*。