- 締切済み
javaの質問です ボタンを右、左クリックすることでswitch文を切
javaの質問です ボタンを右、左クリックすることでswitch文を切り替えたいのですがどうすればいいでしょうか?できれば直接以下のプログラムを直してしまってください。 import java.awt.*; import java.awt.image.*; import java.util.*; import java.util.Timer; public class MojiTest0817 { JFrame frame1; BufferStrategy bstrategy; MojiTest0817(){ frame1=new JFrame("ゲームテスト"); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.setBackground(Color.WHITE); frame1.setResizable(false); frame1.setVisible(true); Insets insets = frame1.getInsets(); frame1.setSize(800 + insets.left + insets.right,600 + insets.top + insets.bottom); frame1.setLocationRelativeTo(null); frame1.setIgnoreRepaint(true); frame1.createBufferStrategy(2); bstrategy = frame1.getBufferStrategy(); java.util.Timer t=new java.util.Timer(); t.schedule(new MyTimerTask(),2,15); } public static void main(String args[]){ MojiTest0817 gtm =new MojiTest0817(); } class MyTimerTask extends TimerTask{ int line = 0; int position = 0; //表示する文字列の配列 String[] messages = { "あelloWorlハローワールド", "あいうあいうあいう", "年収うううう万円の米市職員退職"}; String[] messages2 = { "あんかけちゃーはん", "回答が寄せられるよう、以下を参考にたち", "2教えて!goo では"}; @Override public void run() { int sen=1; Graphics g = bstrategy.getDrawGraphics(); switch(sen){ case 1: if(bstrategy.contentsLost()==false){ System.out.println(messages[line].substring(0,position)); if(position < messages[line].length()){ position += 1; }else if(line == messages.length - 1){ }else{ position = 0; line += 1; } } bstrategy.show(); break; case 2: Graphics g2 = bstrategy.getDrawGraphics(); if(bstrategy.contentsLost()==false){ System.out.println(messages[line].substring(0,position)); if(position < messages2[line].length()){ position += 1; }else if(line == messages2.length - 1){ }else{ position = 0; line += 1; } } bstrategy.show(); break; } } } }
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- askaaska
- ベストアンサー率35% (1455/4149)
> マウスリスナーは範囲が指定できますか? > (100,100)から(200,200)の範囲でクリックされたときのみ反応するような 気持ちは分かるけど どちらかというとロジック的には クリックポイントが(100,100)から(200,200)の範囲にあるかどうかを 判定するべきじゃないかしらね。 もしくは、(100,100)から(200,200)の範囲に マウスリスナーを実装したコンポーネントを置くべきね。
- askaaska
- ベストアンサー率35% (1455/4149)
> TimerTaskが最初止まっている(止まらせるようなプログラムも欲しい)状態のときに Timerは登録されたタスクを ひたすら繰り返すだけよ。 つまり、実行したくなければTimerに登録しなければいいの。
補足
なるほど マウスリスナーは範囲が指定できますか?(100,100)から(200,200)の範囲でクリックされたときのみ反応するような
- askaaska
- ベストアンサー率35% (1455/4149)
ボタンってマウスのボタン? だとすれば MouseListenerとMouseEventを使えば 右クリック、左クリックが拾えるわ。 キーボードならKeyListenerとKeyEventよ。
補足
ええ。そこまでは分かるんですけど、TimerTaskが最初止まっている(止まらせるようなプログラムも欲しい)状態のときに、MouseListenerでクリックしたら、runのところをstartさせたいのです。
補足
なるほど mouseClickedでPointを使って座標を調べて判定すればいいわけですか