2010-11-22 7 views
3

アクセシビリティ要件ごとに、シフト + F10は、右クリックのコンテキストメニューを開くことになっています。Java Swing Shift + F10アクセシビリティ

スイングでは、作成するすべてのコンポーネントにキーバインドを追加するだけです。しかし、私はすべてを処理するためにEventQueueを拡張して実験しましたShift + F10プレス。特に、私は右クリックmousePressesにShiftキー + F10キーイベントに変換するためには、dispatchEvent(AWTEventです)をオーバーライドしました:

protected void dispatchEvent(AWTEvent event) { 
    if (event instanceof KeyEvent) { 
     KeyEvent ev = (KeyEvent) event; 
     if ((ev.getKeyCode() == KeyEvent.VK_F10) && 
        (ev.getModifiersEx() & InputEvent.SHIFT_DOWN_MASK) > 0) { 
      KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager(); 
      Component comp = kfm.getFocusOwner(); 
      Point mouse = MouseInfo.getPointerInfo().getLocation(); 
      SwingUtilities.convertPointFromScreen(mouse, comp); 

      eventToDispatch = new MouseEvent(comp, 
          MouseEvent.MOUSE_RELEASED, ev.getWhen(), 0, mouse.x, mouse.y, 
          1, true); 
     } 
    } 
} 

しかし、これは閉鎖することができることからShiftキー + F10を防止しますJPopupMenusが起動します。このソリューションが実行可能かどうか、またはこの要件を満たすためのよりよい方法があるかどうか

答えて

0
ActionListener actionListener = new ActionListener() { 
     public void actionPerformed(ActionEvent actionEvent) { 
     try { 
      int dotPosition = textField.getCaretPosition(); 
      Rectangle popupLocation = textField 
       .modelToView(dotPosition); 
      popup.show(textField, popupLocation.x, popupLocation.y); 
     } catch (BadLocationException badLocationException) { 
      System.out.println("Oops"); 
     } 
     } 
    }; 
    KeyStroke keystroke = KeyStroke.getKeyStroke(KeyEvent.VK_F10, 
     InputEvent.SHIFT_MASK); 
    textField.registerKeyboardAction(actionListener, keystroke, 
     JComponent.WHEN_FOCUSED); 
+0

私は各コンポーネントのキーボードアクションを登録できることはすでに知っていました。しかし、私たちのアプリは大きいです。その結果、既にマウスポップアップトリガーを処理する多くのコンポーネントが存在します。だからこそ私は、EventQueueのすべてのShift + F10プレスをキャプチャすることでこれを行うことを検討しています。 – Huey