2011-12-15 7 views
-2

私はいけないが、私は要件の画像をアップロードしています任意の助けがスイングでjtoolbarのショートカットキーを見つけるのに問題がありますか?

をいただければ幸い、コードについての手掛かりを持って、あなたは、私が利用可能なすべてのショートカットキーを実装したいが、私は任意の手掛かりを持っていけない、特定のツールバーのためにそれを見ることができますどこ

+3

私はこの質問を閉じるために投票しました – mKorbel

+0

咳...質問を終わらせるために投票しましたが...それは私が期待したほど簡単ではありません - 閉鎖を取り消すことはできないようです。 – kleopatra

+0

約束したイメージはどこですか?私は要件 – kleopatra

答えて

4

最初の考えを開始するには:「それは簡単です、RTFT」を、最初のコードスニペットを吐き出し:

Action action = new AbstractAction("clear text") { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      System.out.println("triggered the action"); 
     } 

    }; 
    action.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("F1")); 

    JToolBar bar = new JToolBar(); 
    bar.add(action); 
    // set toolbar to frame and be happy 

は、F1 ...右、何も押していないに何が起こるかを推測。

ツールバーのボタンは、メニューバーのように表示されます。はデフォルトでアクセラレータキーをサポートしていません。これは(?誰)私には予想外だし、いくつかの理由

  • を有していてもよく、それは

二彼らはネイティブアプリケーションでサポートされていないのSwingチーム

  • の一部の監督だとしても
  • 通常、ツールバーのボタンは「ダブル」メニュー項目のようなものです:その場合、アクセラレータはメニュー項目に設定されます(すべてが正しく設定され、両方で同じアクションが使用されている場合)自動的に誘発されます。

    は今の質問は、OPが同様に彼/彼女のアプリケーションでメニュー/バーがあるかどうか、です。完全な答えはそれに依存します:それは本当にメニューに裏打ちされていないスタンドアロンのツールバー、をならそう、単に

    menu.add(action); 
    

    上記と同じアクションを使用する場合は、もう少し作業がoutlined in a previous answerとして基本的に、関与していますこれは多くのボタンのために指定されたコンテキスト、サブクラスJToolBarの、アドオンを無効に(アクション)メソッドのための標準的な要件であり、ない場合

    JToolBar bar = new JToolBar(); 
        JButton toolBarButton = bar.add(action); 
        toolBarButton.getActionMap().put("myAction", action); 
        toolBarButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
          (KeyStroke) action.getValue(Action.ACCELERATOR_KEY), "myAction"); 
    

    :明示的に、ツールバーに追加したボタンに何かをキーバインドを追加することですそこにスーパーを呼び出した後:

    public class JXToolBar extends JToolBar { 
    
         public JButton add(Action action) { 
           JButton button = super.add(action); 
           KeyStroke stroke = (KeyStroke) action.getValue(Action.ACCELERATOR_KEY); 
           if (stroke != null) { 
            // do the input/actionMap config here 
           } 
         } 
        } 
    
    +1

    1の詳細を聞いて興味:-)完全な滅亡を阻止しようとするupvoted – camickr

    +0

    @camickr良い点 - アクセラレータを表示する唯一の方法は(手動で設定された)ツールチップです。とにかくスクリーンリーダーには必要かもしれません – kleopatra

    +0

    AbstractButtonは 'configurePropertiesFromAction'メソッドを提供しています。ツールチップ?)。 JMenuItemは現在、このメソッドをオーバーライドしてアクセラレータを設定します。 – camickr

    関連する問題