2014-06-22 5 views
0

작동하지 않습니다, 그리고 나는 클립 보드에서 읽기.Ctrl + C 자바 로봇 내가 <kbd>Ctrl 키</kbd> + <kbd>C</kbd>를 사용하여 텍스트를 복사합니다 자바 로봇을 사용하여 코드를 작성하는 것을 시도하고있다

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 포함되어 있지 않습니다 내가 사용하는 코드는 다음입니다.

+2

'Ctrl 키 + C' 당신이 명령에 대해 얘기하는 경우가하는 생각하지 않습니다 line UI. 복사하는 대신 일반적으로 실행중인 프로그램/스레드에 인터럽트를 보내 완전히 중지시킵니다. – indivisible

+1

해결했습니다. 분명히 ctrl + c는 작동하지만 복사 된 텍스트가 클립 보드에 표시되는 데는 시간이 걸립니다. 클립 보드에서 읽기 전에 1 초의 잠자기를 추가하여 문제가 해결되었습니다. – user3503734

답변

-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와 함께 스윙 레이아웃을 사용하므로 사용자가 Ctrl + c/x/v 바로 가기를 사용하여 데이터를 복사/붙여 넣을 수 있습니다. 당신이 로봇 클래스를 사용하고자하는 경우

그러나, 이러한 링크 참조 :

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