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 ....
            }
Другие вопросы по тегам