Java机器人上的Ctrl + C无效

时间:2014-06-22 14:53:30

标签: java clipboard awtrobot

我正在尝试使用Java机器人编写代码,该代码将使用 ctrl + c 复制文本,然后我从剪贴板中读取它。我使用的代码是:

Robot robot = new Robot();
robot.delay(1000);
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(VK_C);
robot.keyRelease(VK_C);
robot.keyRelease(KeyEvent.VK_CONTROL);
String str=(String)Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor);

但是str不包含应该复制的值。

1 个答案:

答案 0 :(得分:-1)

如果您想使用Ctrl + c / x / v剪贴板附加到JTextArea,则应使用Clipboard,StringSelection和DataFlavour类。请考虑以下代码段:

@Override
public void lostOwnership(Clipboard clipboard, Transferable contents) {}


public void setClipboardContents(String str){
    StringSelection stringSelection = new StringSelection(str);
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    clipboard.setContents(stringSelection, this);
}



public String getClipboardContents() {
    String result = "";
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();


    Transferable contents = clipboard.getContents(null);
    boolean hasTransferableText = (contents != null) && contents.isDataFlavorSupported(DataFlavor.stringFlavor);


    if (hasTransferableText) {
        try {
            result = (String)contents.getTransferData(DataFlavor.stringFlavor);
        }
        catch (UnsupportedFlavorException e){
            LOG.log(Level.SEVERE, e.getLocalizedMessage());
        } catch(IOException e){
            LOG.log(Level.SEVERE, e.getLocalizedMessage());
        }
    }


    return result;
}




@Override
public void keyTyped(KeyEvent e) {}




@Override
public void keyPressed(KeyEvent e) {
    if ((e.getKeyCode() == KeyEvent.VK_C) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
        // your code here
    }

    if ((e.getKeyCode() == KeyEvent.VK_V) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
        // your code here
    }

    if ((e.getKeyCode() == KeyEvent.VK_X) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
        // your code here
    }
}




@Override
public void keyReleased(KeyEvent e) {}

当然你也应该实现KeyListener和ClipboardOwner接口。

我使用带有KeyListener的swing布局,因此用户可以使用Ctrl + c / x / v快捷方式复制/粘贴数据。

但是,如果您想使用Robot类,请参阅以下链接:

http://www.java-tips.org/java-se-tips/java.awt/how-to-use-robot-class-in-java.html

http://alvinalexander.com/java/java-robot-class-example-mouse-keystroke