Java - Слушайте для копирования и вставки из буфера обмена
( 1) Есть ли способ прослушивать любые обновления буфера обмена (включая Ctrl+C/X, PrtSc (скриншот) и изменения, сделанные другими программами) в Java? Я попробовал это:
Toolkit.getDefaultToolkit().getSystemClipboard().addFlavorListener(new FlavorListener() {
@Override
public void flavorsChanged(FlavorEvent e) {
System.out.println("Copy detected");
}
});
Это хорошо обрабатывает изменения Ctrl + C, но не замечает изменений, которые не были сделаны пользователем вручную, например, с помощью программного обеспечения для создания снимков экрана или кнопки PrtSc.
(2) Есть ли способ прослушивания действий вставки (Ctrl+V, кнопка "вставить" и т. Д.)? Я хочу что-то подобное (или просто с похожим функционалом):
// ...
@Override
public void prePaste(PasteEvent e) {
System.out.println("Paste detected");
e.cancel(); // reject the paste (so that user's Ctrl+V pastes nothing)
}
// ...
1 ответ
Один из способов зафиксировать, когда элементы вставляются в композиты, — это добавить прослушиватель «addKeyListener».
Ява 8
KeyAdapter keyAdapter = new KeyAdapter()
{
@Override
public void keyPressed(KeyEvent keyEvent)
{
if(((keyEvent.getModifiers() & InputEvent.CTRL_MASK) != 0) && (keyEvent.getKeyCode() == KeyEvent.VK_V))
{
String text = null;
try
{
text = (String) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor);
System.out.println(text);
}
catch(Exception e)
{
e.printStackTrace();
}
keyEvent.consume();
}
}
};
stringTF.addKeyListener(keyAdapter);
для java поверх версии 9 вы можете использовать следующее условие
if(((keyEvent.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) != 0) && (keyEvent.getKeyCode() == KeyEvent.VK_V))
{
// Code ....
}