Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

java swing KeyCodeが全て0になる。

解決したいこと

 SwingでKeyEventを試しているのですが、取得したkeyCodeが全て0になってしまいます。
ちなみにカーソルキーを押すと、そもそもイベントがハンドリングされず、コンソールには何も表示されませんでした。

発生している問題・エラー


該当するソースコード

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;


public class Main extends JFrame{
	public static int WINDOW_WIDTH = 1400;
	public static int WINDOW_HEIGHT = 800;
	public static int TILE_SIZE = 20;


	public static void main(String[] args) {
		new Main();
	}

	private Main() {
		super("RPG");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(Main.WINDOW_WIDTH, Main.WINDOW_HEIGHT);
		this.setLocationRelativeTo(null);
		this.setResizable(false);
		this.setVisible(true);
		this.addKeyListener(new KeyListener() {

			@Override
			public void keyTyped(KeyEvent e) {
				// TODO 自動生成されたメソッド・スタブ
				System.out.println(e.getKeyCode());

			}

			@Override
			public void keyPressed(KeyEvent e) {
				// TODO 自動生成されたメソッド・スタブ

			}

			@Override
			public void keyReleased(KeyEvent e) {
				// TODO 自動生成されたメソッド・スタブ

			}

		});
	}

}


0

1Answer

e.getKeyCode()keyPressedメソッドとkeyReleasedメソッドで有効なようです。
keyTypedメソッドではe.getKeyChar()が有効になるようです。
カーソルキーはkeyPressedメソッドとkeyRelesedメソッドに通知されるようです。

getKeyCharメソッドは常に有効なUnicode文字またはCHAR_UNDEFINEDを返します。文字入力はKEY_TYPEDイベントによって報告されます。KEY_PRESSEDおよびKEY_RELEASEDイベントは必ずしも文字入力に関連付けられていません。そのため、getKeyCharメソッドの結果は、KEY_TYPEDイベントに対してのみ有効です。

                frame.addKeyListener(new KeyListener() {

                        @Override
                        public void keyTyped(KeyEvent e) {
                                // TODO 自動生成されたメソッド・スタブ
                                System.out.println("typed:" + e.getKeyChar());

                        }

                        @Override
                        public void keyPressed(KeyEvent e) {
                                // TODO 自動生成されたメソッド・スタブ
                                System.out.println("pressed:" + e.getKeyCode());

                        }

                        @Override
                        public void keyReleased(KeyEvent e) {
                                // TODO 自動生成されたメソッド・スタブ
                                System.out.println("released:" + e.getKeyCode());
                        }
0Like

Your answer might help someone💌