How to paste from system clipboard content to an arbitrary window using Java

纵然是瞬间 提交于 2019-12-12 18:08:09

问题


I would like to write a Java program that has a button. When the button is pressed it pastes / drops the content of the system clipboard to the text field that currently has focus within an arbitrary, possibly non-Java app (say MS Word). Essentially the button action has to simulate the sending of CTRL-V (paste) action somehow.

Does any one have any suggestions?


回答1:


The package java.awt.datatransfer seems to be a solution, according to this article. Here is another article.

From the latter page, the needed imports:

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

And the method code is below. The solution is to create a listener and add it to the button. The listener should simply get the contents of the clipboard and insert it to whatever component you wish.

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

public String getClipboardContents() {
  String result = "";
  Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
  //odd: the Object param of getContents is not currently used
  Transferable contents = clipboard.getContents(null);
  boolean hasTransferableText =
    (contents != null) &&
    contents.isDataFlavorSupported(DataFlavor.stringFlavor)
  ;
  if ( hasTransferableText ) {
    try {
      result = (String)contents.getTransferData(DataFlavor.stringFlavor);
    }
    catch (UnsupportedFlavorException ex){
      //highly unlikely since we are using a standard DataFlavor
      System.out.println(ex);
      ex.printStackTrace();
    }
    catch (IOException ex) {
      System.out.println(ex);
      ex.printStackTrace();
    }
  }
  return result;
}



回答2:


Use the Actions provided by the editor kits:

JButton paste = new JButton( new DefaultEditorKit.PasteAction() );


来源:https://stackoverflow.com/questions/6376975/how-to-paste-from-system-clipboard-content-to-an-arbitrary-window-using-java

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!