双击键盘绑定Java
问题描述:
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
答
不知道这是否是你追求的还是不
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,这是非常低的水平,所以它可能需要一点努力才能正常工作。
+0
谢谢!这是完美的。我无法使用这个。在静态方法中,但将其作为arg是我从未想到的。至于链接,我会研究这些。我认为一个共享的方法会起同样的作用。 – Coupon22
只是要getInputMap中和getActionMap静态的呢? –
@JeffLaJoie'getInputMap'和'getActionMap'是'JComponent'的方法,它们是[Swing key bindings API]的一部分(http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html ),他不能让他们静态 – MadProgrammer