Обнаружение стрелочных клавиш клавиатуры с помощью Keypressed


1

G'day все,

После обучения здесь, что консоль Java не поддерживает ввод с клавиатуры много, я переключился на свинг и AWT. Моя проблема заключается в том, как определить, когда используются клавиши направления клавиатуры (нечисловая клавиатура). Мой код (ниже) не делает больше, чем печатает символ «маленького ящика» при нажатии клавиш «вниз», «вверх», «влево» и «вправо». Этот маленький символ окна не отличается от символа, используемого клавишами CTRL и ALT, например. Кто-нибудь знает, какова личность клавиш направления клавиатуры, чтобы я мог их кодировать в своем приложении?

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class KeyChecker extends JFrame { 
    JLabel keyLabel = new JLabel("Hit any key"); 

    public KeyChecker() { 
     super("Hit a Key"); 
     setSize(300, 200); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(new FlowLayout(FlowLayout.CENTER)); 
     KeyMonitor monitor = new KeyMonitor(this); 
     setFocusable(true); 
     addKeyListener(monitor); 
     add(keyLabel); 
     setVisible(true); 
    } 

    public static void main(String[] arguments) { 
     new KeyChecker(); 
    } 
} 

class KeyMonitor extends KeyAdapter { 
    KeyChecker display; 

    KeyMonitor(KeyChecker display) { 
     this.display = display; 
    } 

    public void keyPressed(KeyEvent event) { 
     display.keyLabel.setText("" + event.getKeyChar()); 
     display.repaint(); 
    } 
} 
2

Что вы должны сделать, это посмотреть на виртуальной клавиатуре код , а не ключевой персонаж, в keyPressed. Например:

public void keyPressed(KeyEvent event) { 
    switch (event.getKeyCode()) { 
     case KeyEvent.VK_UP: 
      // up arrow 
      break; 
     case KeyEvent.VK_DOWN: 
      // down arrow 
      break; 
     case KeyEvent.VK_RIGHT: 
      // right arrow 
      break; 
     case KeyEvent.VK_LEFT: 
      // left arrow 
      break; 
    } 
} 

Для получения полной информации см. http://java.sun.com/javase/6/docs/api/java/awt/event/KeyEvent.html.

  0

Отлично. Спасибо, Дэвид, высоко оценил. 22 фев. 092009-02-22 01:02:54