• ベストアンサー

JavaでTABキーヒットを認識するには?

Javaで、キー押下をkeyPressed(KeyEvent eve)で認識しています。 このイベント処理では、TABキー(VK_TAB)押下を認識できないようなのですが、どうしたら TABキー押下を認識できるでしょうか? ご教示をお願いいたします。

  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • Yanch
  • ベストアンサー率50% (114/225)
回答No.2

setFocusTraversalKeysEnabled(false); とか使えるんじゃないでしょうか。 VK_TABは、デフォルトで、フォーカスマネージャが使用しているみたいですから、そのままでは、keyPressed()で取れないみたいです。

momomimi
質問者

お礼

Yanch さん、 早速の ご教示、ありがとうございます。 なるほど、やっぱり取れないのですね。 setFocusTraversalKeysEnabled(false); の使い方などのヒントが見れるURLを ご存知でしたら、教えていただけると、 助かります。 よろしくお願いします。

その他の回答 (1)

noname#94983
noname#94983
回答No.1

keyPressed/keyReleasedを使う。

momomimi
質問者

お礼

logger_man さん ご回答、ありがとうございます。 勉強します。

関連するQ&A

  • JavaAppletのイベントの強制発生方法

    JavaAppletのイベント処理についてお伺いしたい事があります。 Appletで作成した画面にボタンAを設置し、 actionPerformedのイベントを作成しました。 private void ボタンA_actionPerformed (java.awt.event.ActionEvent ae) {   //処理内容 } ボタンAを押下すると上記のイベントが呼ばれ正常に動作するのですが、このイベント処理をボタンAを押下する以外の方法で呼び出す事は可能なのでしょうか? 下記内容は例として、ボタンBで[F1]が押されたらボタンAの押下処理を呼び出そうとしております。 private void ボタンB_keyPressed (java.awt.event.KeyEvent ke) {   java.awt.event.ActionEvent ae;   ae = ○○○○○○;   if (e.getKeyCode() == java.awt.event.KeyEvent.VK_F1) {     ボタンA_actionPerformed(ae);   } } java.awt.event.ActionEventで定義した変数aeの中身の所でつまづいております。 ご存知の方おりましたらご指導願います。

  • JAVAのキーアクションについて

    awt.eventのKeyListenerを使ってキーアクションを設定したのですが、例えば"ENTER"を押すとキーアクションが無効になり再び"ENTER"を押すとキーアクションを有効になるといったように、キーアクションを制御することはできないのでしょうか?ちなみ以下のようににif文を使ってもできませんでした。 flag=falseを設定してある public void keyPressed(KeyEvent keyEvent){   if(keyEvent.getKeyCode()==KeyEvent.VK_LEFT){     A();   } } public void A(){   if(flag=false){      ・     ・     ・    } }

    • ベストアンサー
    • Java
  • vbで[ctrl]+[tab]を認識させるにはどうしたらよいでしょうか?

    はじめまして、どうしてもうまくいきません。教えてくださいませ。 [ctrl]+[tab]キー入力を認識させるにはどうしたら良いでしょうか? 現在、VBでMDIフォームを使用してプログラムを作っております。 [ctrl]+[tab]キー入力を行なうと、子フォーム間でフォームの移動が起こってしまいます。CommandButton押下時にのみ、フォームの移動を行なうようにしたいので、 [ctrl]+[tab]キー入力を制御して実現させようとしているのですが、うまくいきません。 MSDNライブラリには、KeyUpとKeyDownのイベントで Tabキーの操作は発生しないと書いてありました。。。 何か方法がありましたらお教えいただけると助かります。 どうぞよろしくお願いします。

  • キーリピート?(Javaプログラミング)

    こんにちは。 Javaの基礎を一通り勉強したので、簡単なゲームでも作ってみようと思ったのですが、早速問題にぶつかってしまいました。 キーを入力して左右にキャラを移動させたいのですが、 キーを押し続けると最初の1歩はすぐに移動してくれるのですが、 そのあとワンテンポ遅れてから、「ズダダダダダ」ってな感じ?で動いてしまいます。 調べてみたら、キーリピートというのが問題になっていることは分かったのですが、 どうすれば普通のゲームのように動いてくれるのでしょうか? 今はまだ下のような感じなんですが・・・。(右に動くとき) public void keyPressed(KeyEvent e) {   if(e.getKeyCode() == e.VK_RIGHT){     muki = 1; // キャラの向き     px += 10; // キャラのx座標   } } よろしくお願いします。

    • ベストアンサー
    • Java
  • java ダブルバッファリングするがちらつく

    javaでゲームをつくろうかと考えています。 そこで、ダブルバッファリングを実装したのですが、ちらついてしまいます。 いろいろ検索をかけて調べたのですが、これ以上改善が見込めないので 質問します。 以下がソースコードです。 画面がちらつくので、画面のリフレッシュレートが関係しているのかわからず、 しかし、ふつうにjava applet でゲームがあるので、多分どこかが間違っていると思います。 ご指摘をお願いします。 import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.net.URL; /*<applet code="applet01" width="320" height="480"></applet>*/ public class applet01 extends Applet implements KeyListener, Runnable { String text = ""; Image image; int x = 100, y = 100; KeyInput key; Image image弾; Bullet bullet; int flag_x = 1; Image backbuffer; Graphics ct; Dimension dim; // 初期化 public void init() { // image = getImage( getDocumentBase(), "test.jpg" ); image = getImage( getCodeBase(), "test.jpg" ); image弾 = getImage( getCodeBase(), "弾.jpg" ); bullet = new Bullet(); key = new KeyInput(); dim = getSize(); backbuffer = createImage( dim.width, dim.height ); ct = backbuffer.getGraphics(); Thread th = new Thread( this ); th.start(); addKeyListener( this ); requestFocus(); } // public void run() { try { while(true) { repaint(); Thread.sleep(1000/60); if( x>640 ) flag_x = 1; if( x<0 ) flag_x = 0; if( 1 == flag_x ) x--; if( 0 == flag_x ) x++; } } catch( Exception err ) { } } // 描画 public void paint( Graphics g ) { ct.setColor( Color.white ); ct.fillRect( 0, 0, dim.width, dim.height ); ct.setColor( Color.red ); ct.fillRect( (dim.width/2)-50 , (dim.height/2)-50, x, y ); // 裏画面に描画 ct.drawString( "画面をクリックしてキーボードで操作できます。", 0, 20 ); ct.drawString( "Hello from Java!", 60, 100 ); ct.drawImage( image, x, y, this ); bullet.Draw( ct, this, image弾 ); // 裏画面を表に反映 g.drawImage( backbuffer, 0, 0, this ); } // キーの入力があったとき public void keyTyped( KeyEvent e ) { repaint(); } // キーが押されたとき public void keyPressed( KeyEvent e ) { key.keyPressed( e ); if( key.isPressing( KeyEvent.VK_UP ) ) y = y - 5; if( key.isPressing( KeyEvent.VK_DOWN ) ) y = y + 5; if( key.isPressing( KeyEvent.VK_LEFT ) ) x = x - 5; if( key.isPressing( KeyEvent.VK_RIGHT ) ) x = x + 5; if( KeyEvent.VK_UP == e.getKeyCode() ) y = y - 5; if( KeyEvent.VK_Z == e.getKeyCode() ) { bullet.x = x; bullet.y = y; } repaint(); } // キーが放されたとき public void keyReleased( KeyEvent e ) { key.keyReleased( e ); } }

    • ベストアンサー
    • Java
  • Java バックグラウンドでキーを監視したい

    Swingを使用しています。ウィンドウにフォーカスが外れても、どのキーが押されたか判定できる方法を教えて下さい。 フォーカスがあっていれば、動作するプログラムは作れました。 import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; public class KeyListenerOnBackgroundTest extends JFrame implements KeyListener{ public KeyListenerOnBackgroundTest() { setSize(300, 200); setDefaultCloseOperation(EXIT_ON_CLOSE); addKeyListener(this); } public static void main(String[] args){ new KeyListenerOnBackgroundTest().setVisible(true); } @Override public void keyPressed(KeyEvent e) { // 文字とコードを表示する System.out.println(e.getKeyCode()+":"+e.getKeyChar()); } @Override public void keyReleased(KeyEvent e) {} @Override public void keyTyped(KeyEvent e) { } }

    • ベストアンサー
    • Java
  • アプレットでのキー入力

    具体的にいうと以下のアプレットを実行した場合に矢印キーを入力しても反応(上、下、、、が表示されない。)がないのです。 一度アプレット自体をクリックしても反応がありません。 何が悪いのでしょうか?よろしくお願いします。 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class practice extends JApplet { private JLabel lb1,lb2; public void init() { Container cnt = getContentPane(); lb1 = new JLabel("矢印キーでお選びください。"); lb2 = new JLabel(); cnt.add(lb1,BorderLayout.NORTH); cnt.add(lb2,BorderLayout.SOUTH); addKeyListener(new practiceKeyListener()); } class practiceKeyListener extends KeyAdapter { public void KeyPressed(KeyEvent e) { String str; int k = e.getKeyCode(); switch(k){ case KeyEvent.VK_UP: str = "上";break; case KeyEvent.VK_DOWN: str = "下";break; case KeyEvent.VK_LEFT: str = "左";break; case KeyEvent.VK_RIGHT: str = "右";break; default: str = "他のキー"; } lb2.setText(str + "ですね。"); } } }

    • ベストアンサー
    • Java
  • TABキーの検出

    Swingコンポーネントで、TABキーのイベントを取得する 方法を教えてください。 タブキー以外は検出できるのですが… import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JPanel; public class TabKeyListener { public TabKeyListener() { JPanel panel = new JPanel(); panel.addKeyListener( new KeyListener(){ public void keyPressed(KeyEvent e) { System.out.println(e.getKeyCode()); } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } } ); JFrame frame = new JFrame(); frame.add(panel); frame.setBounds(100,100,200,200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); panel.requestFocusInWindow(); } public static void main(String[] args) { new TabKeyListener(); } }

    • ベストアンサー
    • Java
  • JavaでJTableの行の追加方法について

    今、Javaの勉強をEclopse3.2で勉強している者ですが、 JTableにてEnterを押したら次の行が追加されるという、 プログラムを作りたいのですが、どうしたら良いでしょうか? 自分はaddRow()を使ってみたのですが、うまく動きませんでした。 何が動かない原因なのかわかりません。 わかる人よろしくお願いします。 他のやり方も教えてください。 private JTable getJTable2() { int po =1; if (jTable == null) { model = new DefaultTableModel(po,2); jTable = new JTable(model); jTable.addKeyListener(new java.awt.event.KeyAdapter() { private int po; public void keyPressed(java.awt.event.KeyEvent e) { System.out.println("keyPressed()"); // TODO Auto-generated Event stub keyPressed() public addRow() String[] data = { "A5", "B5" }; jTable.addRow(data); System.out.println("po="+this.po); po += 1; System.out.println("po="+po); jTable.setValueAt("aikai",po,1); return; } });

    • ベストアンサー
    • Java
  • Javaのゲーム、ボタンの種類で攻撃画像を変える

    Javaでゲームを書いていてどうしてもできないところがあります。 スペースボタンを押したときと、Bボタンを押したときの攻撃のグラフィックを変えたいのですが、どちらのボタンを押してもスペースのときの画像になってしまいます。 ソースが長いため一部しか載せていませんが必要であれば分割して載せることも可能です。 どなたか教えていただけますでしょうか。 public void keyPressed ( KeyEvent e ){//(KeyEvent e ){ //キーが押された時に実行//void外したら if(e.getID()==KeyEvent.KEY_PRESSED){ switch (e.getKeyCode()){ case KeyEvent.VK_SPACE : smokeflag = true; iceflag = false; sh_x=0; sh_y=0; //return smokeflag; // magictype = 0; break; case KeyEvent.VK_B ://氷魔法 iceflag = true; smokeflag = false; sh_x=0; sh_y=0; // magictype = 1; //return iceflag; break; } } } public void dataload() { MediaTracker mt = new MediaTracker(this); TitleImage = getImage(getCodeBase(), "image/title.jpg"); mt.addImage(TitleImage, 0); for(int i=0;i<2;i++){ if( smokeflag == true ){ magictype = 0; } else if( iceflag == true ){ magictype = 1; } MagicImage[i] = getImage(getCodeBase(), "car/image/magic/" + magictype + "_" + i + ".gif");//car//magictype mt.addImage(MagicImage[i], 0); } try{ mt.waitForID(0); } catch(InterruptedException e) { showStatus(""+e); } }