0
キーイベントについて。
このようなコードを書くにはどうすればいいですか?
public static void stop(){
while(true){
if(エンターキーが押された){
break;
}
}
}
0
このようなコードを書くにはどうすればいいですか?
public static void stop(){
while(true){
if(エンターキーが押された){
break;
}
}
}
0
メモ帳でも開けば書けるよ。
0
わろたw
java キーイベント
で調べればいくらでも出てくるよ
swing キーイベントとかかな
0
キーが押された時の処理は沢山ありますが押されるまで待つ
処理がありませんでした。
そこでエンターキーが押されるまで待つ処理を知りたくて質
問しました。
0
「Enterキーを押された」のを直接取ろうとせずに、Enterキ
ーが押されたら「状態」を変更するようにしておいて、その
状態が変わるまで待つんだよ。
0
このようなプログラムを作ってみましたが上手く動きませ
ん。
何故でしょうか?
import java.awt.event.*;
public class Key implements KeyListener{
static int KeyCode;
@Override
public void keyPressed(KeyEvent event){//押され
た
KeyCode = event.getKeyCode();//キーコード
}
@Override
public void keyReleased(KeyEvent event){//離され
た
}
@Override
public void keyTyped(KeyEvent event){//押して離
した
}
static void stop(){
KeyCode=0;
while(true){
if(KeyCode==10){
break;
}
}
}
}
0
どこがうまくいかないのか、自分で試せることはないのか?
0
別スレッドで処理しないといけないとそんな感じじゃないのかな
0
>キーが押された時の処理は沢山ありますが押されるまで
待つ
処理がありませんでした。
それは、そういう処理の仕方は基本的ではないからです。
キー入力のようなイベントは必ずEDTスレッドという特別
なスレッドで実行されます。EDTスレッドはイベントを受
けたらごく短い処理を直ちに行って次のイベントを待つ動
作へ戻らなくてはなりません。よって「キーがおされるま
で待つ」という処理をどうしてもやりたければEDTとは別
のスレッドを自分で起こしてそこでやることになります。
しかし「キーが押されるまで待つ」という処理はたいてい
は何かのイベントの処理の延長でやるものなので結局スレ
ッド間の同期などややこしい処理をすることになり、それ
はJavaのイベント処理を充分理解した上で初めてできるこ
となので、おみうけした限りでは質問者さんにはオススメ
しません。
前の回答者のかたもおっしゃてますが、イベント処理の考
え方を変えて、「キーがおされるまで待つ」処理を考える
のではなく、「キーがおされたら状態を変える(たとえば
表示内容を変えるとか)」という考え方でプログラムを考
えてみてください。
0
詳しく説明ありがとうございます。
今のRPGゲームを作っています。
RPGは会話がありますよね?その時に会話をエンターで進
めたいです。
その場合呼び出すとエンターが押されるまで待つメソッド
があると
会話文
待つ
会話文
待つ
のようにその後のプログラムを簡単に作ることが出来ま
す。
ただキーが押された時に処理をする方法ではどのように作
ればいいかいまいち分かりません。
0
「待つ」を字面どおり、「その場で待つ」と考えるから、
与えられたものを使えないんだ。
Swingもそうだが、イベント型のプログラムでは「待つ」
というのは基本的に「何もせずに終わる」ということにな
る。
つまり、「状態が整ったら次(の文)へ進む」「状態が整
ってなかったら何もしない」ということだ。
どうでもいいが、「RPG」のGは「Game」なので「RPG」に
「ゲーム」は付けないでいいぞ。
0
Keyイベントを受け取るクラスを作りましたがキーを押し
ても反応しません。何故でしょうか?フレームには
addKeyListener(new Key());でイベント登録しています。
import java.awt.event.*;
public class Key implements KeyListener{
static int f=-1;//何を受け取るか。-1=受け取らな
い、0=エンター、1〜9=数字
static int k=-1;//何を押されたか。-1=押されてな
い。0=エンター、1〜9=数字
static int kc;
@Override
public void keyPressed(KeyEvent event){//押され
た
kc = event.getKeyCode();//キーコード
System.out.println(kc+"を押した");
if(f==0){
if(kc==10){
k=0;
}
}
if(f==1){
if(kc==49|kc==97){
k=1;
}
}else if(f==2){
if(kc==49||kc==97){
k=1;
}else if(kc==50||kc==98){
k=2;
}
}else if(f==3){
if(kc==49||kc==97){
k=1;
}else if(kc==50||kc==98){
k=2;
}else if(kc==51||kc==99){
k=3;
}
}else if(f==4){
if(kc==49||kc==97){
k=1;
}else if(kc==50||kc==98){
k=2;
}else if(kc==51||kc==99){
k=3;
}else if(kc==52||kc==100){
k=4;
}
}else if(f==5){
if(kc==49||kc==97){
k=1;
}else if(kc==50||kc==98){
k=2;
}else if(kc==51||kc==99){
k=3;
}else if(kc==52||kc==100){
k=4;
}else if(kc==53||kc==101){
k=5;
}
}else if(f==6){
if(kc==49||kc==97){
k=1;
}else if(kc==50||kc==98){
k=2;
}else if(kc==51||kc==99){
k=3;
}else if(kc==52||kc==100){
k=4;
}else if(kc==53||kc==101){
k=5;
}else if(kc==54||kc==102){
k=6;
}
}else if(f==7){
if(kc==49||kc==97){
k=1;
}else if(kc==50||kc==98){
k=2;
}else if(kc==51||kc==99){
k=3;
}else if(kc==52||kc==100){
k=4;
}else if(kc==53||kc==101){
k=5;
}else if(kc==54||kc==102){
k=6;
}else if(kc==55||kc==103){
k=7;
}
}else if(f==8){
if(kc==49||kc==97){
k=1;
}else if(kc==50||kc==98){
k=2;
}else if(kc==51||kc==99){
k=3;
}else if(kc==52||kc==100){
k=4;
}else if(kc==53||kc==101){
k=5;
}else if(kc==54||kc==102){
k=6;
}else if(kc==55||kc==103){
k=7;
}else if(kc==56||kc==104){
k=8;
}
}else if(f==9){
if(kc==49||kc==97){
k=1;
}else if(kc==50||kc==98){
k=2;
}else if(kc==51||kc==99){
k=3;
}else if(kc==52||kc==100){
k=4;
}else if(kc==53||kc==101){
k=5;
}else if(kc==54||kc==102){
k=6;
}else if(kc==55||kc==103){
k=7;
}else if(kc==56||kc==104){
k=8;
}else if(kc==57||kc==105){
k=9;
}
}
}
@Override
public void keyReleased(KeyEvent event){//離され
た
}
@Override
public void keyTyped(KeyEvent event){//押して離
した
}
static int getK(){
return k;
}
static void setK(){
k=-1;
}
static void setF(int a){
f=a;
}
}
0
たくさん書く前に、まずは最小限のコードでちゃんと動くか
確認するんだよ。
そして、書いたら書いたでどこまでが想定通りでどこからお
かしいか、追って行くんだ。
これをデバックという。
0
フレームに張り付けられているコンポーネントがキーイベントを
消費しているのだと思います。
テキストフィールドやテキストエリア、ボタンなどにフォーカスがある時には
キーイベントはそれらが処理するのでフレームにキーリスナーを登録していても
イベントは伝わりません。
0
編集不可のテキストエリアもイベントを消費するのでしょう
か?
ラベルの代わりに編集不可テキストエリアを使っています。
0
>編集不可のテキストエリアもイベントを消費するのしょうか?
分かりません。
まずテスト用のフレームを作成してKeyオブジェクトをキーリスナーとして登録してみて
想定通りに動くことを確認した後にテキストエリアを張り付けて
キーイベントがフレームに伝わらなくなるのを確認後にテキストエリアを
編集不可にしてみて試してください。
"KeyEventを全部横取りする "で検索してみてください。
トップに来たサイトにKeyEventDispatcherとKeyEventPostProcessor
について記述があります。
おそらくKeyEventPostProcessorでtkrさんのやりたい事ができるのではないかと思います。
質問から6ヶ月以上経過しているので、回答を書き込むことはできません。