Java Swing:如何防止系统复制,剪切,粘贴动作?

KJW*_*KJW 3 java swing keylistener

所以我试图阻止用户通过按Ctrl + C,control + X,control + V来使用默认的系统操作.

我希望在这个特定的scrollPane中的任何地方都能抓住密钥.scrollPane将Component加载到自身中,例如JLabel.

scrollPane.addKeyListener(new KeyListener(){
    @Override
    public void keyPressed(KeyEvent evt) {
        if (evt.isControlDown() && evt.getKeyCode() == KeyEvent.VK_C) {
                System.out.println("disabled");
        } else if (evt.isControlDown() && evt.getKeyCode() == KeyEvent.VK_X) {
               System.out.println("disabled");
        } else if (evt.isControlDown() && evt.getKeyCode() == KeyEvent.VK_V) {
               System.out.println("disabled");
        }
    }

    @Override
    public void keyReleased(KeyEvent arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void keyTyped(KeyEvent arg0) {
        // TODO Auto-generated method stub
    }
});
Run Code Online (Sandbox Code Playgroud)

但是,什么都没有打印出来.

我向Jtree添加了相同的keylistener,但它正在为此工作.

更新:

所以使用keybinds,我如何让JoptionPane出现?

  scrollPane.getInputMap(JComponent.WHEN_FOCUSED)
                        .put(KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_DOWN_MASK), 
                                JOptionPane.showMessageDialog(null, "disabled"));
Run Code Online (Sandbox Code Playgroud)

Ale*_*exR 5

您应该将自定义的 TransferHandler 附加到您想要阻止用户复制/粘贴的 JComponent 的所有实例,该实例将覆盖getCutAction和。getCopyAction

请查看此处了解详细信息:http://docs.oracle.com/javase/1.5.0/docs/guide/swing/1.4/dnd.html#ClipboardTransferSupport


mKo*_*bel 5

更好的是实现KeyBindings而不是KeyListener,因为

1)KeyListener当只能JComponentFocus在窗口,

2)设置KeyListenerJScrollPane代替JTree

3)对于KeyBindings,您可以设置InputMap和ActionMap

  • 到TopLevel容器(JFrame, JDialog, JWindow)

  • 具体JComponent(S)

4)for KeyListenerKeyBindings这个TopLevel容器必须有焦点在屏幕上

5)然后你可以设置为必需event(s)#consume();