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(frame); このメソッドは、Mainコンストラクターで呼び出されます。このメソッドを他のクラスで呼び出して機能させるにはどうすればよいですか?

4

1 に答える 1

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)を確認することもできます。

于 2012-09-05T20:46:13.917 に答える