Можно ли получать информацию, когда содержимое буфера обмена изменяется за пределами Java? - PullRequest
15 голосов
/ 26 января 2011

Я хотел бы сделать следующее: когда пользователь копирует текст в любую программу (firefox, notepad, pdfReader и т. Д.), Мое уже запущенное java-приложение будет информировано и сразу же отобразит всплывающее окно.

Я думаю, чтобы иметь возможность сделать это, мое java-приложение должно вызываться всякий раз, когда изменяется системный буфер обмена.

Возможно ли это с Java, если да, то в какой версии? Я знаю, что мы можем обращаться с системным буфером обмена и манипулировать им, но мой конкретный вопрос касается вызова Java-приложения. при изменении содержимого буфера обмена.

Спасибо

1 Ответ

9 голосов
/ 26 января 2011

Я бы наивно притворился, что это работа для JDIC, ​​но Интернет сказал мне правду. Итак, позвольте мне объяснить немного.

используя Toolkit.getSystemClipboard(), вы можете получить доступ к собственному системному буферу обмена. Как и любой объект Java, этот буфер обмена можно прослушивать. Точно, вы можете позвонить Clipboard.addFlavorListener(...), чтобы прослушать FlavorEvents. Кто они такие ? Они металлические короли! .... нет, нет, я полностью и совершенно отвлекся. Позволь мне вернуться. Итак, FlavorEvent, согласно документу, указывает, что

что доступные DataFlavors были изменены в буфере обмена (источник события).

Что может означает, что содержимое буфера обмена изменилось. Тем не менее, я бы не пошел прямо на это без первого прототипа.

РЕДАКТИРОВАТЬ Пример прототипа из пальцев AlexR

import java.awt.Toolkit;
import java.awt.datatransfer.FlavorEvent;
import java.awt.datatransfer.FlavorListener;

public class Main {
    public static void main(String[] args) throws Exception { 
        Toolkit.getDefaultToolkit().getSystemClipboard().addFlavorListener(new FlavorListener() { 
            @Override 
            public void flavorsChanged(FlavorEvent e) { 
                System.out.println("changed!!! " + e.getSource() + " " + e.toString()); 
            } 
        }); 
        Thread.sleep(100000L); 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...