Pregunta

Por lo tanto, estoy tratando de evitar que el usuario pueda usar las acciones predeterminadas del sistema presionando el control + C, el control + x, el control + V.

Quiero cualquier lugar dentro de este desplazamiento particular, para atrapar la llave. El ScrollPane carga un componente en sí mismo, por ejemplo, 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
    }
});

Sin embargo, no se imprime nada.

Agregué el mismo Keylistener a un JTree, pero está funcionando para eso.

ACTUALIZAR:

Entonces, usando Keybinds, ¿cómo hago que aparezca un joptionPane?

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

Solución

Mejor serían implementos Atajos de teclado más bien que Keylistener, porque

1) KeyListener funciona solo cuando JComponent posee Focus en la ventana,

2) Usted establece KeyListener a JScrollPane en vez de JTree

3) Para las transbordadores de teclas, puede establecer InputMap y ActionMap para

  • al contenedor de toplevel (JFrame, JDialog, JWindow)

  • concreto JComponent(s)

4) para KeyListener y KeyBindings Este contenedor de nivel superior debe centrarse en la pantalla

5) Entonces puede configurar para requerido event(s)#consume();

Otros consejos

Debe adjuntar su controlador de transferencia personalizado que anulará getCutAction y getCopyAction Para todos sus casos de JComponent, desea evitar que la copia/pegar del usuario.

Por favor, eche un vistazo aquí para obtener más detalles: http://docs.oracle.com/javase/1.5.0/docs/guide/swing/1.4/dnd.html#clipboardtransfersupport

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top