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)
您应该将自定义的 TransferHandler 附加到您想要阻止用户复制/粘贴的 JComponent 的所有实例,该实例将覆盖getCutAction和。getCopyAction
请查看此处了解详细信息:http://docs.oracle.com/javase/1.5.0/docs/guide/swing/1.4/dnd.html#ClipboardTransferSupport
更好的是实现KeyBindings而不是KeyListener,因为
1)KeyListener当只能JComponent有Focus在窗口,
2)设置KeyListener来JScrollPane代替JTree
3)对于KeyBindings,您可以设置InputMap和ActionMap
到TopLevel容器(JFrame, JDialog, JWindow)
具体JComponent(S)
4)for KeyListener和KeyBindings这个TopLevel容器必须有焦点在屏幕上
5)然后你可以设置为必需event(s)#consume();
| 归档时间: |
|
| 查看次数: |
2604 次 |
| 最近记录: |