2017-04-20 68 views
1

我試圖在雙擊它時將任何地方的文字(如MS word,pdf,而不是任何java組件)複製到剪貼板。因此,我使用awt.Robot將選定的單詞複製到剪貼板後雙擊它。複製後,該單詞將返回。因此,我用兩種方法copy_From_Originalcopy_From_ClipBoard從雙擊將文字複製到剪貼板

問題是當我複製單詞時,它會顯示上一個單詞剪貼板內容不是當前複製的內容。

如果有的話,另一種方法來做這個過程可以自由地說出來。

謝謝。對不起,我的英語不好。

public class copyWord { 

public static String copy_From_Original() { 
    try { 
     Robot robot = new Robot(); 
     robot.keyPress(KeyEvent.VK_CONTROL); 
     robot.keyPress(KeyEvent.VK_C); 
     robot.keyRelease(KeyEvent.VK_C); 
     robot.keyRelease(KeyEvent.VK_CONTROL); 
    } catch (AWTException ex) { 
     Logger.getLogger(copyWord.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    String word = copy_From_ClipBoard(); 
    return word; 
} 

private static String copy_From_ClipBoard() { 

    Toolkit toolkit = Toolkit.getDefaultToolkit(); 
    Clipboard clipboard = toolkit.getSystemClipboard(); 
    try { 
     String result = (String) clipboard.getData(DataFlavor.stringFlavor); 
     return result; 
    } catch (Exception e) { 
     System.out.println("ERROR"); 
     return null; 
    } 
} } 

回答

1

請勿使用機器人進行此操作。你還沒有說什麼類型的組件包含雙擊文本,但是如果它是JTextField或JTextArea或JTextComponent的任何其他子類,則可以簡單地調用copy()

如果它是一個AWT文本字段或文本區域,您可以使用的地方剪貼板上自己的選擇:

String text = textField.getSelectedText(); 

Clipboard clipboard = textField.getToolkit().getSystemClipboard(); 
clipboard.setContents(new StringSelection(text), null); 
+0

謝謝回答VGR。所選文字不屬於任何組件。它來自另一個位置。像MS詞或什麼的。所以這就是我使用機器人的原因。 –

+0

這是一個挑戰。 Java不能真正監視或控制其他應用程序中的活動。 – VGR

+0

這很糟糕。我不需要選擇一個詞,只需要複製一個選定的詞。爲此,無需控制或監視其他應用程序。只需發送Windows正常複製信號並將其抓到剪貼板。只是所有。機器人會這樣做。 –