Проблемы с реализацией действий клавиатуры - PullRequest
0 голосов
/ 03 сентября 2011

Я не понимаю, как реализовать действия клавиатуры вообще.

Щелчки мыши, кнопки, текстовое поле, текстовое поле У меня все отлично, клавиатура для меня как китайская стена.

У меня есть что-то вроде этого, и я хотел бы реализовать закрытие клавиатуры при нажатии клавиши «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)
      {

      }
    } 



}

Ответы [ 4 ]

3 голосов
/ 03 сентября 2011

, и я хотел бы реализовать закрытие клавиатуры, когда я нажимаю "C":

Затем вы должны создать собственное действие и использовать JMenu с элементом меню закрытия иускоритель.

ExitAction из Закрытие приложения сделает это за вас.

3 голосов
/ 03 сентября 2011

Я бы начал с проверки Связывания клавиш .Это более надежно, чем KeyListeners, так как не имеет много проблем с фокусировкой.Кроме того, KeyListeners - это старое решение AWT для подобных проблем.

1 голос
/ 03 сентября 2011

Просто добавьте строку

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);
    }
});
1 голос
/ 03 сентября 2011

Вы не прикрепили свой KeyboardListener к компоненту.Вы также не используете поле anEventListener, определенное в вашем классе - оно затенено внутри initGUI.

...