2014-12-29 2 views
-1

Я собираюсь войти в графический интерфейс в ближайшее время, и я хотел бы знать, как включить Java-программу для обнаружения, если пользователь нажимает клавишу на клавиатуре с помощью ActionListener, а затем определяет, что делать в зависимости от какой ключ нажал пользователь. Я слышал о переменных, называемых переменными char, которые могут содержать письмо, и я также задавался вопросом, имеют ли они участие в тестировании ввода пользователя.Java: создание основных элементов управления

Если использование ActionListener для обнаружения ввода пользователя не требуется, объясните мне самым простым способом, как программисты обычно создают игры, в которых есть классические элементы управления W A S D и тому подобное.

+3

Вы могли бы хотите заглянуть в [Key Listeners] (http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html) или [Key Bindings] (http://docs.oracle.com/javase/tutorial /uiswing/misc/keybinding.html). – PakkuDon

ответ

0

KeyListener - это интерфейс, который вы ищете. Создайте класс, реализующий KeyListener, затем вызовите addKeyListener(...) на ваше окно (класс, расширяющий JFrame). В частности, метод keyPressed(KeyEvent e) может использоваться для ответа на нажатия кнопок клавиатуры.

Чтобы разработать, ActionListeners специально предназначены для работы с различными «Действиями». Поскольку это относится к вам, это означает щелчок JButton s или JMenuItem s. ActionListener s не будет захватывать нажатия клавиш или другие движения мыши, такие как перетаскивание.

Вот немного класса, который я написал для игры, над которой я работаю, для обработки ввода с клавиатуры. Он использует клавиши со стрелками для перемещения, Z-ключ в качестве кнопки A и клавиши X в качестве кнопки B (думаю, традиционная настройка эмулятора).

/** Manager for all keyboard input. Only singleton instance is allowed. */ 
public class KeyboardListener implements KeyListener{ 

    /** The up key code */ 
    public static final int UP = KeyEvent.VK_UP; 
    /** The left key code */ 
    public static final int LEFT = KeyEvent.VK_LEFT; 
    /** The down key code */ 
    public static final int DOWN = KeyEvent.VK_DOWN; 
    /** The right key code */ 
    public static final int RIGHT = KeyEvent.VK_RIGHT; 
    /** The "a" (main button/weak confirm button) key code */ 
    public static final int A = KeyEvent.VK_Z; 
    /** The "b" (secondary button/weak decline button) key code */ 
    public static final int B = KeyEvent.VK_X; 
    /** The "start" (tertiary/strong confirm button) key code */ 
    public static final int START = KeyEvent.VK_ENTER; 
    /** The "esc" (tertiary/strong decline button) key code */ 
    public static final int ESC = KeyEvent.VK_ESCAPE; 

    /** The singleton instance of keyboardListener to be used by all frames */ 
    protected static final KeyboardListener instance = new KeyboardListener(); 

    /** Constructor for KeyboardListener */ 
    private KeyboardListener(){} 

    /** The frame this KeyboardListener is listening to */ 
    private Frame frame; //Note - Frame is a class I've written, Frame extends JFrame 

    /** Set the Frame the KeyboardListener is listening to */ 
    public static void setFrame(Frame f){ 
     instance.frame = f; 
     instance.frame.addKeyListener(instance); 
    } 

    /** Unused */ 
    @Override 
    public void keyTyped(KeyEvent e) {} 

    /** Handle key presses */ 
    @Override 
    public void keyPressed(KeyEvent e) { 
     int keyCode = e.getKeyCode(); 
     if(keyCode == UP){ 
      //Handle push of the up arrow 
     } 
     //etc.... 
    } 

    /** Unused */ 
    @Override 
    public void keyReleased(KeyEvent e) {}; 
} 
+0

хорошо, мое единственное беспокойство в том, что мне также нужно реализовать ActionListener для меню и кнопок, как бы я мог реализовать оба одновременно? – pebble225

+0

Если вы говорите о компоненте GUI, который находится в верхней части окна ('JMenu'), то да, вы хотите, чтобы на вашем' JMenuItem'е были активированы actionListeners, чтобы они обрабатывали щелчки мыши. Если вы хотите этого, это еще один вопрос непосредственно о actionListeners. – Mshnik

+0

@ pebble225 Используйте API 'Action', это позволяет вам определить одно действие, которое может быть применено к привязке ключей,' JButton', 'JMenu' и' JMenuItem', которая обеспечивает централизованную конфигурационную точку ('Action') для всех этих элементов – MadProgrammer

1

Если у вас есть предопределенный набор вводов ключей, одним из простейших решений является использование API привязки клавиш. См. How to Use Key Bindings для получения более подробной информации.

JButton, JMenu и JMenuItem позволяют предоставлять коротким коротким замыканиям.

См:

Для получения более подробной информации.

Вы также можете взглянуть на How to Use Actions, который позволяет определить централизованный объект действий, который может быть применен к клавиш, кнопок и меню, что делает его легко реализованы многоразовых действия

Смежные вопросы