我根本不明白如何实现键盘动作。
鼠标点击,按钮,文本框,文本区,我得到很好,键盘就像中国墙对我来说。
我有这样的东西,我想实现键盘关闭时,我按下"C":
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class TestGUI
{
private KeyboardListener anEventListener;
public TestGUI()
{
initGUI();
}
private void initGUI()
{
//Prepare Frame
JFrame myFrame = new JFrame();
myFrame.setTitle("Test");
myFrame.setSize(550, 500);
myFrame.setLocation(600, 100);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setLayout(null);
KeyboardListener anEventListener = new KeyboardListener();
//Show Frame
myFrame.setVisible(true);
}
public static void main(String args[])
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new TestGUI();
}
});
}
class KeyboardListener implements KeyListener
{
public void keyPressed (KeyEvent event)
{
if (event.getKeyCode() == KeyEvent.VK_C)
{
System.exit(0);
}
}
public void keyReleased(KeyEvent event)
{
}
public void keyTyped (KeyEvent event)
{
}
}
}
我将从检查键绑定开始。这比KeyListeners
更可靠,因为它没有很多焦点问题。此外,KeyListeners
是解决此类问题的旧AWT解决方案。
,我想实现键盘关闭时,我按下"C":
然后你应该创建一个自定义的Action,并使用一个带有关闭菜单项和加速键的JMenu。
关闭应用程序中的ExitAction
将为您完成此操作。
您没有将KeyboardListener
附加到组件。您也没有使用在类中定义的anEventListener
字段-它被遮蔽在initGUI
中。
添加一行
myFrame.addKeyListener(anEventListener);
在你的框架内注册你的监听器,它会正常工作。
注意:这将只处理与你的框架相关的关键事件。如果您周围有其他组件,您可能希望以不同的方式处理它(另请参阅如何使用键绑定)。
在你的情况下,你可以很容易地构建一个带有键绑定的版本:
JComponent rootPane = myFrame.getRootPane();
rootPane.getInputMap().put(KeyStroke.getKeyStroke("C"), "closeThisOne");
rootPane.getActionMap().put("closeThisOne", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});