【问题标题】:Java Swing: How to prevent system copy,cut,paste action?Java Swing:如何防止系统复制、剪切、粘贴动作?
【发布时间】:2012-01-09 13:13:44
【问题描述】:

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

我想在这个特定的 scrollPane 内的任何地方抓住关键。 scrollPane 将一个组件加载到自身中,例如 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
    }
});

但是,没有打印任何内容。

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

更新:

那么使用键绑定,如何让 JoptionPane 出现?

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

【问题讨论】:

    标签: java swing keylistener


    【解决方案1】:

    最好是实现KeyBindings 而不是KeyListener,因为

    1) KeyListener 仅在 JComponent 在窗口中有 Focus 时有效,

    2) 你将KeyListener 设置为JScrollPane 而不是JTree

    3) 对于 KeyBindings,您可以为

    设置 InputMap 和 ActionMap
    • 到顶级容器 (JFrame, JDialog, JWindow)

    • 具体的JComponent(s)

    4) 对于KeyListenerKeyBindings,此顶级容器必须在屏幕上具有焦点

    5) 然后您可以设置为所需的event(s)#consume()

    【讨论】:

    【解决方案2】:

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

    详情请看这里:http://docs.oracle.com/javase/1.5.0/docs/guide/swing/1.4/dnd.html#ClipboardTransferSupport

    【讨论】:

      【解决方案3】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      相关资源
      最近更新 更多