2011-07-15 47 views

回答

200

这个工作对我来说,是相当简单:

导入这些:

import java.awt.datatransfer.*; 
import java.awt.Toolkit; 

然后把这个代码片段,无论你想改变剪贴板:

String myString = "This text will be copied into clipboard when running this code!"; 
StringSelection stringSelection = new StringSelection(myString); 
Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard(); 
clpbrd.setContents(stringSelection, null); 

我刚刚尝试过它,它的工作原理。不确定是否存在一些“良好实践”缺陷,但它会解决您的问题!

LH

+1

我们可以setContents()与所有者太http://stackoverflow.com/questions/3591945/copying-to-clipboard-in-java –

+0

@AquariusPower似乎传递'stringSelection'作为第二参数'setContents(..)',使它成为'ClipboardOwner',就像在链接的答案中一样,没有任何意义:查看[source](http://grepcode.com/file/repository.grepcode.com/java /root/jdk/openjdk/8u40-b25/java/awt/datatransfer/StringSelection.java#StringSelection.lostOwnership%28java.awt.datatransfer.Clipboard%2Cjava.awt.datatransfer.Transferable%29),ClipboardOwner的唯一方法'它实现了'lostOwnership(..)',它是空的。所以,第二个参数似乎是一个完全可选的回调。 –

+0

@EvgeniSergeev它可能是有用的,如果我们扩展StringSelection :) –

10

下面的类允许你为一个字符串从剪贴板复制/粘贴/。

import java.awt.AWTException; 
import java.awt.HeadlessException; 
import java.awt.Robot; 
import java.awt.Toolkit; 
import java.awt.datatransfer.Clipboard; 
import java.awt.datatransfer.DataFlavor; 
import java.awt.datatransfer.StringSelection; 
import java.awt.datatransfer.UnsupportedFlavorException; 
import java.awt.event.KeyEvent; 
import java.io.IOException; 

public class SystemClipboard 
{ 
    public static void copy(String text) 
    { 
     Clipboard clipboard = getSystemClipboard(); 

     clipboard.setContents(new StringSelection(text), null); 
    } 

    public static void paste() throws AWTException 
    { 
     Robot robot = new Robot(); 

     robot.keyPress(KeyEvent.VK_CONTROL); 
     robot.keyPress(KeyEvent.VK_V); 
     robot.keyRelease(KeyEvent.VK_CONTROL); 
     robot.keyRelease(KeyEvent.VK_V); 
    } 

    public static String get() throws Exception 
    { 
     Clipboard systemClipboard = getSystemClipboard(); 
     DataFlavor dataFlavor = DataFlavor.stringFlavor; 

     if (systemClipboard.isDataFlavorAvailable(dataFlavor)) 
     { 
      Object text = systemClipboard.getData(dataFlavor); 
      return (String) text; 
     } 

     return null; 
    } 

    private static Clipboard getSystemClipboard() 
    { 
     Toolkit defaultToolkit = Toolkit.getDefaultToolkit(); 
     Clipboard systemClipboard = defaultToolkit.getSystemClipboard(); 

     return systemClipboard; 
    } 
} 
+1

可能需要一些粘贴OS X的逻辑,因为它很特殊。 –

3

这是写在一个装饰的方式接受的答案:

Toolkit.getDefaultToolkit() 
     .getSystemClipboard() 
     .setContents(
       new StringSelection(txtMySQLScript.getText()), 
       null 
     ); 
1

我发现这样做,所以你可以从txtbox获得输入或有什么更好的方式在文本中生成框,并能够点击一个按钮来做到这一点。这里是复制到剪贴板的代码(2017/2018)!

import java.awt.datatransfer.*; 
import java.awt.Toolkit; 

private void /* Action performed when the copy to clipboard button is clicked */ { 
    String ctc = txtCommand.getText().toString(); 
    StringSelection stringSelection = new StringSelection(ctc); 
    Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard(); 
    clpbrd.setContents(stringSelection, null); 
} 

// txtCommand is the variable of a text box 
+1

希望这有助于! – ElementCodez

+0

“2017/2018”是什么意思? Java的特定版本?你使用哪个版本? –

相关问题