Teclado Numérico

Pessoal, boa noite.

Como que faço para acionar as teclas do teclado numérico com num lock desligado? Estou desenvolvendo um jogo e quero que o personagem ande pelo teclado numérico, só que não consigo utilizar as teclas (1,3,7 ,9), ele reconhece o pressionamento das teclas como (Home, Page up, etc).

As setas é possível utilizar o vk_kp_down, tem algo parecido para o 1,3,7 e 9?

É, por padrão as teclas de setas que funcionam no teclado numerico sao 8,2,6,4

Dá para diferenciar o PAGE_DOWN “normal” do PAGE_DOWN do numpad usando o método KeyEvent.getKeyLocation(), veja:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;

public class Main {
  public static void main(String... args) {
    final JFrame frame = new JFrame();

    frame.addKeyListener(new KeyListener() {
      @Override
      public void keyPressed(KeyEvent e) {
        final int code = e.getKeyCode();
        final boolean isNumpad = e.getKeyLocation() == KeyEvent.KEY_LOCATION_NUMPAD;

        if (code == KeyEvent.VK_NUMPAD1 || (code == KeyEvent.VK_END && isNumpad)) {
          System.out.println("1");
        } else if (code == KeyEvent.VK_NUMPAD3 || (code == KeyEvent.VK_PAGE_DOWN && isNumpad)) {
          System.out.println("3");
        } else if (code == KeyEvent.VK_NUMPAD7 || (code == KeyEvent.VK_HOME && isNumpad)) {
          System.out.println("7");
        } else if (code == KeyEvent.VK_NUMPAD9 || (code == KeyEvent.VK_PAGE_UP && isNumpad)) {
          System.out.println("9");
        }
      }

      @Override
      public void keyTyped(KeyEvent e) {
      }

      @Override
      public void keyReleased(KeyEvent e) {
      }
    });

    frame.setSize(300, 300);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
  }
}

Só não sei se vai funcionar 100% pro que vc precisa e também eu só testei no Linux.

1 curtida

Tem alguma forma de simular o pressionamento dessa tecla com a classe robot?

Essa classe eu nunca usei, então não sei dizer.