Swing 如何监听ctrl+v事件 项目中需要在任何地方监听ctrl+v时间,而不是仅仅在menu中,是不是只能用keyListener,在keyListener中怎么监听组合键??------------------------------------------------------------- Quietly through ..... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /** * 为RootPaneContainer组件添加键盘事件 * @param rpc RootPaneContainer组件 * @param action 需要执行的动作 * @param keyName 键的名称 * @param keyCode 键的数字代码 * @param modifiers 任意修饰符的按位或组合 */ public static void registerKeyEvent(RootPaneContainer rpc, Action action, String keyName, int keyCode, int modifiers) { JRootPane rp = rpc.getRootPane(); InputMap inputMap = rp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); inputMap.put(KeyStroke.getKeyStroke(keyCode, modifiers), keyName); rp.getActionMap().put(keyName, action); }用法registerKeyEvent(jframe, action, "随便什么都行,只要不重复", KeyEvent.VK_V, KeyEvent.CTRL_MASK); //我是这么写的,不知道行不?public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub if( e.getKeyText(e.getKeyCode()).toLowerCase().equals("ctrl")){ _isCtrl = true ; }else{ if( _isCtrl){ //judge Ctrl+ v if(e.getKeyText(e.getKeyCode()).toUpperCase().equals("V") ){ pasteDevices(); } // judge Ctrl + x if(e.getKeyText(e.getKeyCode()).toUpperCase().equals("X")){ cutDevices(); } _isCtrl = false; } } }------------------------------------------------------------- Quietly through ..... 还有就是你那种方法的响应事件怎么写??------------------------------------------------------------- Quietly through ..... 添加KeyListener的话应该这样写 if(e.getModifiers() == KeyEvent.CTRL_MASK && e.getKeyCode() == 'C') { }不过KeyListener只保证控件获得焦点的时候才响应,我上边帖的那个实现方法只要窗口处于激活状态,不管焦点在哪个控件上都会响应的不好意思,刚才忘了帖action,就是你说的响应实现 Action action = new AbstractAction() { private static final long serialVersionUID = 3322001448168076177L; public void actionPerformed(ActionEvent e) { System.out.println("Do something..."); } }; cancelBtn.registerKeyboardAction(cancelBtn.getActionListeners()[0],KeyStroke.getKeyStroke("control C"),JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);第一个是响应的事件 求用java给已知msn用户发消息的方法 回答问题给分(三) java 截取图片 windowAdapter 如何使用??想调用windowclosed事件 oracle 字符串存储问题?? Java的一点小问题,谢谢指导! 新手提问,如何返回list指定位置数据.不清楚list中的字段名称,只知道几行几列. 提问初始化问题 怎么访问sql数据库? 使用eclipse来上传文件至gitlab,上传不了 静态页面如何调用静态页面?有几种方法? 如何将串"20080808"转成Date类的对象。。。 面试题。。。
/**
* 为RootPaneContainer组件添加键盘事件
* @param rpc RootPaneContainer组件
* @param action 需要执行的动作
* @param keyName 键的名称
* @param keyCode 键的数字代码
* @param modifiers 任意修饰符的按位或组合
*/
public static void registerKeyEvent(RootPaneContainer rpc, Action action, String keyName, int keyCode, int modifiers)
{
JRootPane rp = rpc.getRootPane();
InputMap inputMap = rp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(KeyStroke.getKeyStroke(keyCode, modifiers), keyName);
rp.getActionMap().put(keyName, action);
}
用法
registerKeyEvent(jframe, action, "随便什么都行,只要不重复", KeyEvent.VK_V, KeyEvent.CTRL_MASK);
// TODO Auto-generated method stub
if( e.getKeyText(e.getKeyCode()).toLowerCase().equals("ctrl")){
_isCtrl = true ;
}else{
if( _isCtrl){
//judge Ctrl+ v
if(e.getKeyText(e.getKeyCode()).toUpperCase().equals("V") ){
pasteDevices();
}
// judge Ctrl + x
if(e.getKeyText(e.getKeyCode()).toUpperCase().equals("X")){
cutDevices();
}
_isCtrl = false;
}
}
}
-------------------------------------------------------------
Quietly through .....
Quietly through .....
if(e.getModifiers() == KeyEvent.CTRL_MASK && e.getKeyCode() == 'C')
{
}
不过KeyListener只保证控件获得焦点的时候才响应,我上边帖的那个实现方法只要窗口处于激活状态,不管焦点在哪个控件上都会响应的不好意思,刚才忘了帖action,就是你说的响应实现
Action action = new AbstractAction()
{
private static final long serialVersionUID = 3322001448168076177L; public void actionPerformed(ActionEvent e)
{
System.out.println("Do something...");
}
};