2012-09-05 65 views
0
public void fullscreenKey(final JFrame frame) 
{ 
    k = KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0); 
    getInputMap(WHEN_IN_FOCUSED_WINDOW).put(k, k.toString()); 
    getActionMap().put(k.toString(), new AbstractAction() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      fullscreen(!f1, frame); 
      f1 = !f1; 
     } 
    }); 
} 

每當我將此方法調用到其他類中時,什麼都不會發生。由於getInputMap和getActionMap,我不能使這個方法是靜態的。我使用Main main = new Main(); main.fullscreenKey(幀);這個方法在Main構造函數中被調用。我如何在其他類中調用此方法並使其工作?雙擊鍵盤綁定Java

+0

只是要getInputMap中和getActionMap靜態的呢? –

+1

@JeffLaJoie'getInputMap'和'getActionMap'是'JComponent'的方法,它們是[Swing key bindings API]的一部分(http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html ),他不能讓他們靜態 – MadProgrammer

回答

1

不知道這是否是你追求的還是不

public void fullscreenKey(JComponent comp, final JFrame frame) 
{ 
    k = KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0); 
    comp.getInputMap(WHEN_IN_FOCUSED_WINDOW).put(k, k.toString()); 
    comp.getActionMap().put(k.toString(), new AbstractAction() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      fullscreen(!f1, frame); 
      f1 = !f1; 
     } 
    }); 
} 

如果你正在尋找一個「全局」鍵,而不是處理程序(即要處理擊鍵隨時在您的應用程序),你可以看看Toolkit.addAWTEventListener,這是非常低的水平,所以它可能需要一點努力才能正常工作。

你也可以看看KeyboardFocusManagerJava Global JFrame KeyListener

+0

謝謝!這是完美的。我無法使用這個。在靜態方法中,但將其作爲arg是我從未想到的。至於鏈接,我會研究這些。我認爲一個共享的方法會起同樣的作用。 – Coupon22