前提・実現したいこと
初心者のような質問で申し訳ありません。
現在フレームのクラスを作っています。そんな中、キーイベントが正しく取得されません。
発生している問題・エラーメッセージ
該当のソースコード
関係ないクラスが多いですが全て貼ります
Java
1package org.jyl.base; 2 3import java.awt.Color; 4import java.awt.Dimension; 5import java.awt.LayoutManager; 6import java.awt.AWTEvent; 7import java.awt.event.KeyEvent; 8import java.awt.event.KeyListener; 9 10import javax.swing.JPanel; 11 12import org.jyl.base.event.JylKeyEvent; 13 14public class JylPanel extends JPanel implements KeyListener 15{ 16 public JylPanel( LayoutManager layout ) 17 { 18 super( layout ); 19 20 setBackground( 0xff000000 ); 21 22 setPreferredSize( 640, 480 ); 23 24// enableEvents( AWTEvent.KEY_EVENT_MASK ); 25 this.addKeyListener( this ); 26 } 27 28 public void setBackground( int argb ) 29 { 30 setBackground( new Color( argb, true ) ); 31 } 32 33 public void setPreferredSize( int width, int height ) 34 { 35 setPreferredSize( new Dimension( width, height ) ); 36 } 37 38 public void jKeyPresser( JylKeyEvent e ){} 39 40 public void jKeyReleaser( JylKeyEvent e ){} 41 42 public void jKeyTyper( JylKeyEvent e ){} 43 44 @Override public final void keyPressed( KeyEvent e ) 45 { 46 // ここに出力メゾットを追記 -> 呼び出されず 47 KGetter k = new KGetter(); 48 JylKeyEvent key = k.get( e.getKeyCode(), e.getKeyChar(), e.getWhen() ); 49 jKeyPresser( key ); 50 } 51 52 @Override public final void keyReleased( KeyEvent e ) 53 { 54 KGetter k = new KGetter(); 55 JylKeyEvent key = k.get( e.getKeyCode(), e.getKeyChar(), e.getWhen() ); 56 jKeyReleaser( key ); 57 } 58 59 @Override public final void keyTyped( KeyEvent e ) 60 { 61 KGetter k = new KGetter(); 62 JylKeyEvent key = k.get( e.getKeyCode(), e.getKeyChar(), e.getWhen() ); 63 jKeyTyper( key ); 64 } 65}
package org.jyl.base; import org.jyl.base.event.JylKeyEvent; import org.jyl.base.event.KeyGetter; class KGetter extends KeyGetter // 別パッケージへアクセスするためのクラス { @Override public JylKeyEvent get( int kc, char kch, long wh ) { return super.get( kc, kch, wh ); } }
package org.jyl.base.event; public class JylKeyEvent { private int keycode = 0; // キーコード private char keychar = ' '; // キーに関連付けられた文字 private long when = 0; // 押された時間 JylKeyEvent(){} private JylKeyEvent( int kcode, char kchar, long when ) { keycode = kcode; keychar = kchar; this.when = when; } public char getKeyChar() { return keychar; } public int getKeyCode() { return keycode; } JylKeyEvent getInstance( int kc, char kch, long wh ) { JylKeyEvent key = new JylKeyEvent( kc, kch, wh ); return key; } public long getWhen() { return when; } }
package org.jyl.base.event; /** * キーを取得するためのクラス * 使用する必要はない */ public abstract class KeyGetter { protected static JylKeyEvent key; protected JylKeyEvent get( int kc, char kch, long wh ) { JylKeyEvent k = new JylKeyEvent(); key = k.getInstance( kc, kch, wh ); return key; } }
試したこと
KeyPressed( e )に出力メゾットを追加したが反応なし->KeyListenerの方の問題?
補足情報(FW/ツールのバージョンなど)
Raspberry pi、javaは8です。
###追記
回答を受けて、少しソースに追記しました
processKeyEventとenableEventsを使用しても無理でした。
回答1件
あなたの回答
tips
プレビュー