3

( 1 ) Is there a way to listen for any clipboard updates (including Ctrl+C/X, PrtSc (screenshot) and changes made by other programs) in Java? I have tried this:

    Toolkit.getDefaultToolkit().getSystemClipboard().addFlavorListener(new FlavorListener() {
        @Override
        public void flavorsChanged(FlavorEvent e) {
            System.out.println("Copy detected");
        }
    });

This handles Ctrl+C changes well but doesn't notice changes which are not made by user manually, e.g. by screenshotting software or PrtSc button.

( 2 ) Is there a way to listen for paste actions (Ctrl+V, "paste" button, etc.)? I want something like that (or just with similar functionality):

// ...
    @Override 
    public void prePaste(PasteEvent e) {
        System.out.println("Paste detected");
        e.cancel(); // reject the paste (so that user's Ctrl+V pastes nothing)
    }
// ...
German Vekhorev
  • 339
  • 6
  • 16

1 Answers1

0

one way to capture when things are pasted into composites is to add a Listener "addKeyListener".

Java 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);

for java over version 9 you can use the following condition

            if(((keyEvent.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) != 0) && (keyEvent.getKeyCode() == KeyEvent.VK_V))
            {
                // Code ....
            }