我根本没有了解如何实现键盘操作。
鼠标点击,按钮,Textfield,Textarea我很好,键盘对我来说就像中国墙。
我有类似的东西,当我按下“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)
{
}
}
}
答案 0 :(得分:3)
我首先查看Key Bindings。这比KeyListeners
更可靠,因为它没有很多焦点问题。此外,KeyListeners
是针对此类问题的旧AWT解决方案。
答案 1 :(得分:3)
我想在按下“C”时关闭键盘关闭:
然后你应该创建一个自定义Action并使用带有关闭菜单项和加速器的JMenu。
来自Closing an Application的ExitAction
会为您执行此操作。
答案 2 :(得分:1)
您尚未将KeyboardListener
附加到组件。您也没有使用班级中定义的anEventListener
字段 - 它被隐藏在initGUI
内。
答案 3 :(得分:1)
只需添加一行
即可myFrame.addKeyListener(anEventListener);
在你的框架中注册你的听众,它会正常工作。
注意:这只会处理与您的框架相关的关键事件。如果你周围有其他组件,你可能希望以不同的方式处理它(另请参阅how to use key bindings)。
在您的情况下,您可以非常轻松地构建具有键绑定的版本:
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);
}
});