2017-04-20 2 views
1

J'essaie de copier des mots de n'importe où (comme MS Word, pdf, pas de n'importe quel composant java) dans le clipboard quand je double-clique dessus. Par conséquent, j'utilise awt.Robot pour copier ce mot sélectionné dans le presse-papiers après avoir cliqué deux fois dessus. Après la copie, le mot reviendra. Par conséquent, j'utilise deux méthodes copy_From_Original et copy_From_ClipBoard.Copier des mots dans le presse-papiers en double-cliquant

Le problème est que lorsque je copie un mot, il affiche le mot précédent que le contenu du presse-papiers n'est pas copié.

S'il y a, d'autres façons de faire ce processus, n'hésitez pas à le dire.

Merci. Désolé pour mon mauvais anglais.

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; 
    } 
} } 

Répondre

1

N'utilisez pas Robot pour cela. Vous n'avez pas indiqué quel type de composant contient le texte double-cliqué, mais s'il s'agit d'un JTextField ou JTextArea ou de toute autre sous-classe de JTextComponent, vous pouvez simplement appeler copy().

Si c'est un TextField AWT ou TextArea, vous pouvez utiliser la sélection lieu le presse-papiers vous:

String text = textField.getSelectedText(); 

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

Merci pour la réponse VGR. Le texte sélectionné n'appartient à aucun composant. C'est d'un autre endroit. Comme MS Word ou quelque chose. C'est pourquoi j'utilise un robot. –

+0

Cela représente un défi. Java ne peut pas vraiment surveiller ou contrôler l'activité dans d'autres applications. – VGR

+0

C'est mauvais. Je n'ai pas besoin de sélectionner un mot juste pour copier un mot sélectionné. Pour ce faire, pas besoin de contrôler ou de surveiller une autre application. Envoyez juste le signal normal de copie de fenêtres et attrapez-le au presse-papiers. Juste tout. Le robot va le faire. –