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();
}

}

A 回答 (6件)

これじゃないかな?


http://oshiete1.goo.ne.jp/qa4525996.html

setFocusTraversalKeysEnabled(false);
とか使えるんじゃないでしょうか。

VK_TABは、デフォルトで、フォーカスマネージャが使用しているみたいですから、そのままでは、keyPressed()で取れないみたいです。
    • good
    • 0
この回答へのお礼

ありがとうございました。
実現できました。

お礼日時:2009/05/28 18:44

JFrame frame = new JFrame();


frame.setFocusTraversalKeysEnabled(false);

すいません。これでした。
    • good
    • 0

java.awt.Component co = new java.awt.Component();


co.setFocusTraversalKeysEnabled(false);

こんな感じかな?
    • good
    • 0

おおっ!!すごい!!


Yanch様、ありがとうございます。
    • good
    • 0

環境によってはTABの検出がダメなことがあるようです。



参考URL:http://mylinux.blog42.fc2.com/blog-entry-268.html
    • good
    • 0

KeyEvent e


if(e.getKeyCode() == e.VK_TAB)じゃない?

参考URL:http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qテキストエリア内でタグ
を使わずにenterキーで改行したい

myshop.cgiという、フリーのcgiを使いたくて、超初心者なりに色々
調べながらもなんとか思い通りに出来てきたんですが、一つだけ
どうしても自分では解決できなくて、困ってます。
enterキーでは改行できず、<BR>でしか改行できないテキストエリア内に、
ある文章をコピペしたいんですが、コピペした後に、いちいち<BR>を
入れるのが面倒なんで、enterキーで改行できるようにしたいんです。
しかし、どこをどういじればいいのかさっぱりわからなくて・・・。
とりあえず悩んでる付近のコードを載せておきます。
超初心者です!よろしくお願いします!
解決したいテキストエリアは、「サイトの紹介文」を入力するとこです。
-------------------------------------------------------------
print <<"EOF";
</select>$nini</td>
</tr>
<tr>
<td>カテゴリ3 <select name="ct3">
<option value="">選択しない</optin>
EOF

if ($use_sub) {
foreach (0 .. $#cates) {

@SUB = split(/\s+/, $subct[$_]);
$i=0;
foreach $j (@SUB) {
print qq( <option value="$_\,$i">$cates[$_] &raquo; $j</option>\n);
$i++;
}
}
}

if (!$print_url) { $nourl = qq(<span style="color:red;">現在非表\示に設定されています。</span> ); }

print <<'EOF';
</select>$nini</td>
</tr>
<tr>
<td>サイトタイトル <small>(タグ利用可\能\ / 同じECサイトのテキスト広告が効果的)</small><br>
<input type="text" name="tl" size="68"></td>
<tr>
<tr>
<td>バナーのHTMLコード <small>(アフィリエイト仲介サイトからコピー&amp;ペーストして下さい。)</small><br>
<textarea name="code" cols="54" rows="8"></textarea></td>
</tr>
<tr>
<td>サイトの紹介文 <small>(タグ利用可\能\ / 但し改行は反映されないので<span style="font-weight:bold;">&lt;br&gt;を使用</span>して下さい。)</small><br>
<textarea name="msg" cols="54" rows="20"><BR><BR><BR><BR></textarea></td>
</tr>
<tr>
<td>価格 <small>(タグも利用可\能\)</small><br>
<input type="text" name="url" size="68"></td>
<tr>
<tr>
<td>サイトに関係の深いキーワード <small>(任意。検索で使用、5個までで最大文字数は20文字。)<br>
<input size="14" type="text" name="key1" maxlength="20">
<input size="14" type="text" name="key2" maxlength="20">
<input size="14" type="text" name="key3" maxlength="20">
<input size="14" type="text" name="key4" maxlength="20">
<input size="14" type="text" name="key5" maxlength="20"></td>
</tr>
<tr>
<td>サイト紹介文の位置<br>
<input type="radio" name="line" value="0" id="bot" checked><label for="bot">バナーの下</label>
<input type="radio" name="line" value="1" id="sid"><label for="sid">バナーの横</label></td>
</tr>
<tr>
<td>オススメマーク<br>
<input type="radio" name="rec" value="0" id="ron" checked><label for="ron">付けない</label>
<input type="radio" name="rec" value="1" id="rof"><label for="rof">付ける</label></td>
</tr>
<tr>
<td>表\示状態 (非アクティブにチェックを入れると一覧には表\示されません。)<br>
<input type="checkbox" name="no_act" value="1" id="nact"><label for="nact">非アクティブにする</label></td>
</tr>
<tr>
<td align="center"><br>
<input type="submit" value=" 登録する "><input type="reset" value="リセット">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
EOF
exit;

myshop.cgiという、フリーのcgiを使いたくて、超初心者なりに色々
調べながらもなんとか思い通りに出来てきたんですが、一つだけ
どうしても自分では解決できなくて、困ってます。
enterキーでは改行できず、<BR>でしか改行できないテキストエリア内に、
ある文章をコピペしたいんですが、コピペした後に、いちいち<BR>を
入れるのが面倒なんで、enterキーで改行できるようにしたいんです。
しかし、どこをどういじればいいのかさっぱりわからなくて・・・。
とりあえず悩んでる付近のコードを載せておきま...続きを読む

Aベストアンサー

サブルーチン decode の
 $in{'code'} =~ s/\r\n//g;
 $in{'code'} =~ s/\r//g;
 $in{'code'} =~ s/\n//g;
 $in{'msg'} =~ s/\r\n//g;
 $in{'msg'} =~ s/\r//g;
 $in{'msg'} =~ s/\n//g;
ですべての改行文字を削除していますから、ここを
 $in{'code'} =~ s/\r\n/<br>/g;
 $in{'code'} =~ s/\r/<br>/g;
 $in{'code'} =~ s/\n/<br>/g;
 $in{'msg'} =~ s/\r\n/<br>/g;
 $in{'msg'} =~ s/\r/<br>/g;
 $in{'msg'} =~ s/\n/<br>/g;
にすれば、とりあえずご希望は叶うでしょう。

QInteger.parseInt()について public static void main(String[] args) { int a =

初歩的な質問だと思うのですが、、、

public class TestTree {

public static void main(String[] args) {

int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);

GreatTree myTree = new GreatTree(a, b);
myTree.makeTree();
myTree.makeGround();
}

}

というプログラムについて、Integer.parseInt()はどういう意味を持つのかがわかりません。ただ適当につけた名前だとは思えないです。教えてもらえたら幸いです。お願いします。

Aベストアンサー

> argsで入力されたものは例え数字でも文字列として扱われているから、それをintにしている。ということですよね?

引数として (String[] args) と設定されていますので、
おっしゃるとおり 引数 args[]配列に入っているものは、文字列です。

ポイントは、 「String[]」でしょうか。。

QMETAタグに登録するキーワード数について

以下METAタグに登録するキーワード数ですが、どれぐらいの数を登録するのが妥当でしょうか?膨大な数のキーワードを登録してもいいのでしょうか?

<meta name="Keywords" content="">

Aベストアンサー

ある無料ホームページのヘルプには、ページあたり5~10語くらいが適当だと書いてありました。

本来、キーワードというものは本の巻末の索引から来ているもので、やたらと沢山あっても混乱してしまいます。

ですので、本当に自分のサイトのテーマ(主題)に沿った重要な言葉を絞り込んで登録した方が、検索結果を見て来た人に親切だと思います。

いくらトレンドで人気のあるキーワードだからといっても、あなたのサイトが、サイトの内容とあまり関係のないそのキーワードで引っかかってしまったら、情報としての価値は非常に低いものになってしまいます。(これは、私が仕事をしている業界用語で「ゴミ」と呼ばれています。)

ゴミ情報にされないように、あなたのサイトの価値を高めるためにも適切な言葉を絞り込んで登録して下さい。ご検討お祈りいたします。

Qclass Test_A {  main(){}}の実行順序は?

public class Test_A {
public static void main(){

int a = 0;
int b = 1;

}
}
例えば上のようなサンプルで何故 main()がクラスTest_A の中に挟まっているのでしょうか?実行順序としては main()が終了したら、クラスTest_A の方はどうなるのでしょうか? main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。よろしくお願いします。 

Aベストアンサー

>main()がクラスTest_A の中に挟まっているのでしょうか

Javaは、全てのプロパティ、メソッドはどこかのクラスに属していないといけないからです。
mainメソッドであっても例外ではありません。

>main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。

これを考える上で最も重要なのはmainメソッドがstaticであることです。
staticなメソッドは、そのクラスのインスタンスを作らなくても、
つまり、new Test_A();としなくても実行することが可能です。
プログラム実行時には、Test_Aクラスのインスタンスは生成されません。
質問のコードでは変数a,bに値が代入され、それで終わりです。

Javaでは、(正確にはJavaVMは)実行するclassファイルにある、
String[]引数を持ったvoid mainメソッドを実行する仕様になっています。
しかし、mainメソッドを実行するときには何のインスタンスも生成されていないので、
何かのインスタンスのメソッドを実行することはできません。
なので、staticなメソッドでないとJavaVMが実行できないのです。
さらに、JavaVMからアクセス可能なスコープを与える必要があるので、
publicである必要もあるのです。

あとは、そのmainメソッドに指定されたコードを実行し、mainメソッドの最後まで処理が進んだら
そこでJavaVMが終了し、プログラムも終了します。

※細かい話ですが、main()からプログラムは始まりません。
正確に言うと、引数なしのmain()メソッドは他のメソッドと何ら代わりがありません。
プログラムを始めるには、
アクセススコープがpublicで、staticな戻り値のなく、引数にString配列を取るmainメソッド
であることが必要です。つまり、
public static void main(String[] args)
とするのが通常です。
試しに質問のコードをjavaコマンドで実行すると、NoClassDefFoundErrorが出るはずです。

>main()がクラスTest_A の中に挟まっているのでしょうか

Javaは、全てのプロパティ、メソッドはどこかのクラスに属していないといけないからです。
mainメソッドであっても例外ではありません。

>main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。

これを考える上で最も重要なのはmainメソッドがstaticであることです。
staticなメソッドは、そのクラスのインスタンスを作らなくても、
つまり、new Test_A();としなくても実行することが可能です。
プログラム実行時...続きを読む

Qmetaタグには複合キーワードを入れる?

metaタグに悩んでいます。Googleはmetaタグを重要視していないことは知っていますが、Yahooはしているみたいなのでキチンと使用と思います。meta keyword なのですが、ここにはページの重要なキーワードを入れるべきなのは知っていますが、複合キーワードはどうしたらいいのかわかりません。

<meta name="Keywords" content="広告名,長所,メリット,特徴" />
<meta name="Keywords" content="広告名 長所,広告名 メリット,広告名 特徴" />

この2つではどっちがいいでしょうか?キーワードという考え方では上のほうがいいと思うのですが

Aベストアンサー

複数のキーワードで検索結果に出したいのなら複数入れても問題は在りません。
尚、複数入れる場合はキーワードの間には「,」で区切る事。
半角の空白では駄目。

Q"try{}catch(){}"文で"close()"はどのように書けばよいのでしょうか。

こんにちは、片岡と言います。

プログラム1は、Java言語で学ぶデザインパターン入門(結城浩さん著)の
433ページを参考にして書きました。

私は、プログラム1のclose()の書き方よりもプログラム2のようなclose()の書き方が、
良いと思っています。
なぜならば、プログラム1では、out.writeObject(memento)行の例外によって、
close()が実行されないからです。

私のこの考え方は正しいのでしょうか。
もっと良いclose()の書き方はあるのでしょうか。
ご存知の方はいらっしゃいませんか。

●プログラム1
public class Main {
public static void saveMemento(Memento memento) {
try {
ObjectOutput out = new ObjectOutputStream(new FileOutputStream("game.dat"));
out.writeObject(memento);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
… //以下略
}

public class Memento implements Serializable {
… //以下略
}


●プログラム2
public class Main {
public static void saveMemento(Memento memento) {
try {
ObjectOutput out = new ObjectOutputStream(new FileOutputStream("game.dat"));
out.writeObject(memento);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
… //以下略
}

public class Memento implements Serializable {
… //以下略
}


なお、私の環境は以下の通りです。
OS: Microsoft Windows XP Professional SP2
開発環境:Eclipse 3.2.2
java: java version "1.4.2_13"

こんにちは、片岡と言います。

プログラム1は、Java言語で学ぶデザインパターン入門(結城浩さん著)の
433ページを参考にして書きました。

私は、プログラム1のclose()の書き方よりもプログラム2のようなclose()の書き方が、
良いと思っています。
なぜならば、プログラム1では、out.writeObject(memento)行の例外によって、
close()が実行されないからです。

私のこの考え方は正しいのでしょうか。
もっと良いclose()の書き方はあるのでしょうか。
ご存知の方はいらっしゃいませんか。

●プロ...続きを読む

Aベストアンサー

>私のこの考え方は正しいのでしょうか。
正しいです。質問者さんが書かれているやり方が一般的です。
念のため書いておきますが、outをtryの外で宣言しないとコンパイルが通りません。

まぁ、あくまでデザインパターンを学ぶための本ですから、細かなコーディングについて気にする必要はないでしょう(疑問を持つことは良いことですが)。

QメッセンジャーバッグTIMBUK2についている「黄色いプラスチックの輪っか」ってタグ?

TIMBUK2メッセンジャーバック(クラシック)に
黄色い三角形のプラスチックがショルダー部についているのですが、
ただのタグのようなもので捨てても構わない、
それともデザイン上つけたまま?
または使い道があるのでしょうか?

お手数ですが宜しくお願い致します。

Aベストアンサー

それは商品陳列用のフックです。

購入後使い道はありません。
形が気に入っているなら付けていてもいいとは思いますが、
自分は付けている人を見たことがありません。

本国サイトでのカラーオーダーの場合はその部品は付いていません。
陳列することがないからだと思います。

Qpanel.add(new Button("1"));という書き方について。

javaを学習している者です。

インスタンスを作成するには

クラス名 変数名 = new クラス名();

というのが基本だと思うのですが、タイトルのような書き方(panel.add(new Button("1"))だと頭の中ではどのように考えればいいのでしょうか?変数名を持たないインスタンスを生成してパネルにのっけている、ということでしょうか?しかもこれがfor文で繰り返されていると
for(int i = 0; i < 10; i++){
panel.add(new Button(Integer.toString(i)));
}
余計にややこしくて分からなくなってしまいます。一応10個違うインスタンスをそれぞれ作っているのでしょうか?

本に載っていた書き方だし、エラーも出ないのでまず間違っていないのは分かるのですが、いまいちピンと来ないです・・・。

よろしくお願いします。

Aベストアンサー

>一応10個違うインスタンスをそれぞれ作っているのでしょうか?
そうですね。
変数はインスタンスを参照するビット列のアドレスを格納したのもといえます。
ボタンの場合などで
以後インスタンスを参照する必要がなければ変数はいらないといえます。リソースに問題なければよい訳です。
ループでは new の繰り返しはリソース消費が大きくなるので参照変数を利用するわけです。

QMETAタグのキーワードの設定

METAタグでキーワードを設定したいのですが、
たとえば、飲食店関係のキーワードで、

日本料理店、日本料理、

のように、日本料理がかぶってしまう場合はどうすればよいのでしょうか。

その場合、日本料理店で日本料理も含まれるのでしょうか。

もう一つ例に、
トマト、トマトスパゲティ、トマトソース、トマトのラーメン

など、トマトが沢山入ってもいいのですか。

Aベストアンサー

基本的に単語単語で入力していきます。

なので、

日本, 料理, 店

といった感じだと思います。
あとの方も

トマト, スパゲッティ, ソース, ラーメン

といった感じでしょうか。
トマトラーメンっておいしいんですかね…

Qimportするには java.io.*; import org.apache.log4j.*;

EclipseでJavaの開発をしています。
import java.io.*;
import org.apache.log4j.*;
がエラーになります。
多分ライブラリーに入れる必要があるのだと思いますが、その方法について
教えて下さい。宜しくお願い致します。

Aベストアンサー

プロジェクトフォルダを右クリック→「ビルド・パス」→「ビルド・パスの構成」
あるいはプロジェクトフォルダを右クリック→「プロパティ」→「Javaのビルド・パス」

で、ライブラリがプロジェクトフォルダ配下に存在しているなら「Jarの追加」
プロジェクトフォルダ以外の場所にあるなら「外部Jarの追加」で追加できます。

ちなみにjava.ioはJ2SEに含まれているので(「JREシステムライブラリ」があるはずなので)
追加しなくても良いです。


人気Q&Aランキング

おすすめ情報