难以实现键盘操作



我根本不明白如何实现键盘动作。

鼠标点击,按钮,文本框,文本区,我得到很好,键盘就像中国墙对我来说。

我有这样的东西,我想实现键盘关闭时,我按下"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);
    }
});

最新更新