Как перенести выделение слово через hotkey в java программу?

406
05 июня 2017, 22:35

Я хочу реализовать следующее: я выделяю слово в любом месте (веб-сайт, pdf, ms word и т. д.), Нажимаю заданное мной горячие клавиши, и это слово появится в окне написанной программы на java (swing), либо заносится в БД через java программу, которое допустим весит в трее. Трудность в следующем: как реализовать, чтобы выделенное слово передавалось программе. Может есть для этой цели какие то библиотеки или готовые классы?

Answer 1

Реализовать это лучше через буфер обмена. Симулировать на хоткей копирования в буфера обмена и последующей считывания в программе с буфера обмена.

Пример работы с буфером обмена. Думаю после него станет понятно. http://www.javapractices.com/topic/TopicAction.do?Id=82

import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.Toolkit;
import java.io.*;
public final class TextTransfer implements ClipboardOwner {
  public static void main(String...  aArguments ){
    TextTransfer textTransfer = new TextTransfer();
    //display what is currently on the clipboard
    System.out.println("Clipboard contains:" + textTransfer.getClipboardContents());
    //change the contents and then re-display
    textTransfer.setClipboardContents("blah, blah, blah");
    System.out.println("Clipboard contains:" +     textTransfer.getClipboardContents());
  }
   /**
   * Empty implementation of the ClipboardOwner interface.
   */
   @Override public void lostOwnership(Clipboard aClipboard, Transferable aContents){
     //do nothing
   }
  /**
  * Place a String on the clipboard, and make this class the
  * owner of the Clipboard's contents.
  */
  public void setClipboardContents(String aString){
    StringSelection stringSelection = new StringSelection(aString);
    Clipboard clipboard =     Toolkit.getDefaultToolkit().getSystemClipboard();
    clipboard.setContents(stringSelection, this);
  }
  /**
  * Get the String residing on the clipboard.
  *
  * @return any text found on the Clipboard; if none found, return an
  * empty String.
  */
  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 | IOException ex){
        System.out.println(ex);
        ex.printStackTrace();
      }
    }
    return result;
  }
} 
READ ALSO
Открытие картинок и видео в JPanel Java Swing

Открытие картинок и видео в JPanel Java Swing

Есть одно, родительское, окно - JFrameВ нём есть JPanel

369
The prepared statement has been finalized

The prepared statement has been finalized

Доброго времени суток, товарищи! Уже несколько дней бьюсь над одной проблемой и не понимаю что я делаю не так

854
Более одного конструктора в классе [требует правки]

Более одного конструктора в классе [требует правки]

Как можно написать два конструктора для одного класса?

340
Как получить JSON из CURL запроса?

Как получить JSON из CURL запроса?

У меня имеется следующий пример CURL запроса

295