2011-12-15 12 views
-2

我沒有任何線索代碼,任何幫助,將不勝感激無法在搖擺中找到jtoolbar的快捷鍵?

我上傳的需求圖像,你可以看到,對於特定的工具欄我想實現所有快捷鍵可用,但我沒有任何線索,從哪裏開始

+3

我投票結束這個問題 – mKorbel 2011-12-15 09:09:45

+0

咳嗽......也投票結束了這個問題,但是......這並不像我預想的那樣直截了當 - 似乎無法撤銷關閉,嗯。 – kleopatra 2011-12-15 11:20:16

回答

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 ...好吧,沒有什麼會發生什麼。

事實證明,工具欄中的按鈕 - 不像它們的菜單副本 - 不支持默認情況下的支持加速鍵。這是意外,我(其他人?),並可能有幾個原因

  • 它的鞦韆隊
  • 的一時疏忽,他們不會被本機應用程序,以及支持

第二通常情況下,toolBar按鈕可能是一種「雙」菜單項:情況就是這樣,加速器設置在菜單項上(如果所有內容都已正確設置並且在兩者中都使用了相同的操作)被自動神奇地觸發。

現在的問題是,OP是否在他/她的應用程序中也有菜單/欄。完整的答案取決於:如果是這樣,只需使用相同的動作與上述

menu.add(action); 

如果是真的一個獨立的工具欄,而不是通過菜單的支持下,稍微更多的工作是參與,基本上爲outlined in a previous answer這是鍵綁定明確添加到添加到工具欄上的按鈕,像:

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"); 

如果這是一個給定的範圍內許多按鈕,子類JToolBar中,覆蓋加(動作)方法的標準要求,做它在那裏叫超級:

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 
       } 
     } 
    }