现在的问题是我在action map中注册的action根本就没有被触发,那有哪里谈得上对控件进行判断呢。估计是JTree控件注册了同样的键盘事件,并且它的action先被触发,在JTree自己的action中,把这个键盘事件给consume掉了,所以我自己的控件就接收不到相应的键盘事件了。不知道有没有什么方法可以解除swing控件所注册的键盘事件。我调用过JTree的getInputMap().clear()和getActionMap().clear(),不过不起作用:(

解决方案 »

  1.   

    举个splitpane的例子:
    ActionMap am = (ActionMap)UIManager.get("SplitPane.actionMap");
    am.remove("selectMax");//主销掉了F8的功能。
    am.put("positiveIncrement",new AbstractAction(){
    //可以定义自己的移动功能
    });
      

  2.   

    请问怎样获得焦点呢?我在鼠标点在自己的面板上后,就调用面板的requestFocus()方法,却仍然不能接收到键盘事件。我想不应该是焦点的问题,因为我注册的其他键盘事件如ctrl_W、ctrl_A、ctrl_S、ctrl_D(就是玩游戏时候经常用另外一套上下左右键),这些都可以被正确响应,就是右手边那四个上下左右键不能被响应:(