大家好! 我想问问这个方法里面的参数到底要怎么传呢?假如我想用Ctrl+b 这个组合键 但是用这个方法(getKeyStroke("ctrl b"))返回的总是null值  不管我传什么进去 只要是String型的参数 返回都是null。

解决方案 »

  1.   

    不知道 没用过这个方法啊你怎么不穿 event呢
      

  2.   

    楼主看看API吧分析字符串并返回 KeyStroke。字符串必须具有以下语法: 
        <modifiers>* (<typedID> | <pressedReleasedID>)    modifiers := shift | control | ctrl | meta | alt | altGraph 
        typedID := typed <typedKey>
        typedKey := string of length 1 giving Unicode character.
        pressedReleasedID := (pressed | released) key
        key := KeyEvent key code name, i.e. the name following "VK_".
     如果没有指定是键入、按下还是释放,则假定为按下。以下是一些示例: 
         "INSERT" => getKeyStroke(KeyEvent.VK_INSERT, 0);
         "control DELETE" => getKeyStroke(KeyEvent.VK_DELETE, InputEvent.CTRL_MASK);
         "alt shift X" => getKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK);
         "alt shift released X" => getKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK, true);
         "typed a" => getKeyStroke('a');
     为了维持向后兼容性,指定 null String 或格式不正确的 String 将返回 null。
      

  3.   

    getKeyStroke(KeyEvent.VK_B, InputEvent.CTRL_MASK);
    就是你想要的了
      

  4.   


    可以试试楼上的
    getKeyStroke("ctrl")
    getKeyStroke("b")
    用2个组合,不知道可以
      

  5.   

    有发帖的时间 api自己看完都回了 哎
      

  6.   

    将近一年前的帖子了,不知道回复能不能对后人有用。顺便鄙视一下楼上6楼一类的人物,真是站着说话不腰疼,您试着通过查阅API文档解决过这个问题没有?其实楼主的问题很好解决,只要把那个String参数从“ctrl b”换成“ctrl B”即可。记住里面的typedKey参数必须要大写!这是一个很诡异的问题。显然,导致getKeyStroke返回null是因为参数String的格式不对。因此问题就来了,难道说指定键盘上的单个字母键只能够用大写字母吗?这种约定的出处在哪里?关于这些,API文档只字未提,也没有提出警告。顺便说一下,JDK中java.awt.event.KeyEvent里面定义的KeyCode并没有对大小写做出区分。我想这样做的原因是KeyStroke设计的时候就“默认”不会用来进行编辑而只用来进行控制,因此不区分大小写无所谓。吐嘈一下:JDK API的文档真TMD烂!跟Visual Studio的哪怕是随机文档相比真是天上地下的区别。