2011-01-28 25 views
4

我的意思是,在Web瀏覽器中按'F5'將會刷新網頁,而不管焦點在哪裏。我如何使用GUI應用程序在Java中執行此操作?我可以爲所有組件添加「Kylististener」,但我確定這不是正確的方法。如何使應用程序中的所有組件都響應特定的按鍵事件?

+0

[jpanel keylistener]的可能重複(http://stackoverflow.com/questions/4780910/jpanel-keylistener) – Riduidel 2011-01-28 14:13:07

+0

使用KeyboardFocusManager或AWTEventListener將在您可能在您的應用程序中使用的任何窗口上偵聽KeyEvents。通常這種類型的功能屬於特定的窗口,這就是我喜歡Key Bindings方法的原因。解決方案取決於您的要求。 – camickr 2011-01-28 17:08:36

回答

6

您可以使用Swing的輸入和動作映射機制:

component.getRootPane().getInputMap(JRootPane.WHEN_IN_FOCUSED_WINDOW) 
      .put(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0), "refresh"); 
component.getRootPane().getActionMap().put("refresh", new AbstractAction() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     // Code here 
    } 
}); 
0

你可以加一個AWTEventListenerjava.awt.Toolkit

AWTEventListener listener = new AWTEventListener() {    
     @Override 
     public void eventDispatched(AWTEvent ev) { 
      if (ev instanceof KeyEvent) { 
       KeyEvent key = (KeyEvent) ev; 
       if (key.getID() == KeyEvent.KEY_PRESSED && KeyEvent.getKeyText(key.getKeyCode()).equals("F5")) { 
        System.out.println(ev); 
        // TODO something meaningfull 
        key.consume(); 
       } 
      } 
     } 
    }; 

    Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.KEY_EVENT_MASK); 
2

另一種選擇是使用菜單欄爲您的應用程序。然後刷新就成爲菜單上的一個菜單項,您可以將F5作爲加速器分配給菜單項。在幕後它會爲你做鍵盤綁定。

這是一個很好的方法,因爲現在你有一個自我文檔化的GUI。用戶可以通過在菜單中搜索各種選項來調用刷新。高級用戶最終會學習加速鍵,甚至不使用鼠標。像所有GUI設計一樣,您應該可以使用鍵盤或鼠標調用函數。

相關問題