• ベストアンサー

JAVA Applet for文でのまわし方

JAVA Appletでボタンを押すと色々反応するプログラムを作っています。for文を使わず長々としたプログラムだとコンパイルでき実行できますが、for文を使って簡潔にまとめる表記の仕方がどうもよくわかりません。 /* リスナの登録 */ bt[0].addActionListener(new testActionListener0()); bt[1].addActionListener(new testActionListener1()); bt[2].addActionListener(new testActionListener2()); bt[3].addActionListener(new testActionListener3()); bt[4].addActionListener(new testActionListener4()); bt[5].addActionListener(new testActionListener5()); bt[6].addActionListener(new testActionListener6()); bt[7].addActionListener(new testActionListener7()); bt[8].addActionListener(new testActionListener8()); 上記はfor文でまとめれると思うのですが、どのように表記すれば良いのかわかりません。 for文でくくって、 bt[i].addActionListener~~ とすればそれぞれbt[i]が反応するのはわかりますが、その後の、 ~~(new testActionListener○()); の○の部分にiを入れる場合の表記の仕方がわかりません。もしくはiを入れる事はできないのでしょうか? ※このあとそれぞれのtestActionListener(0~8)のリスナクラスが呼び出されます。 説明が足りないのであれば回答の後、補足しますm(_ _)m

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

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.3

まあ一応 nonakada 氏の書いたようにリフレクションを使えばできない訳ではありませんが、普通はこんなことでわざわざこういう裏技のようなやり方を使うことはしません。 確かにクラスの名前が連番になっているのでループを使って簡略化できそうだと思われるのも解るのですが、実際にはこれはたまたま「人間にとって」各クラスの名前が似ているというだけで、「コンピュータにとっては」単にたくさんクラスがあるというだけでしかないのです。 従って、ここではループを使わずに一つ一つやるべきだと私は思います。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1274344
ikepan
質問者

お礼

ご返答ありがとうございます。 わかりやすい説明でとてもよく理解できました。for文を使わず一つ一つやってみようかと思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#61448
noname#61448
回答No.2

私も自信はありませんが bt[i].addActionListener(Class.forName("testActionListener" + i).newInstance()); じゃできないですかね? もちろんfor文で・・・

ikepan
質問者

お礼

ご返答ありがとうございます。 上の通りためしてみましたが、コンパイルできませんでした。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

ちょっと自信はありませんができないと思いますよ

ikepan
質問者

お礼

ご返答ありがとうございます。 Java初心者の私にとって、できる事とできない事がまだ区別がつかないので参考になりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • java applet

    import java. applet.*; import java. awt. Button; import java. awt. Label; import java. awt. TextField; import java. awt. event.*; public class 1120 extends Applet implements ActionListener { private TextField box1 = new TextField(5); private TextField box2 = new TextField(5); private TextField box3 = new TextField(5); private Label moji1 = new Label(" と "); private Label moji2 = new Label(" の和は "); private Label moji3 = new Label(" である。 "); private Button ok = new Button("OK"); public void init() { resize( 320 , 240); add( box1 ); add( moji1 ); add( box2 ); add( moji2 ); add( box3 ); add( moji3 ); add( ok ); ok.addActionListener( this ); } public void actionPerformed( ActionEvent e ) { int i=0 ,j =0 , k; String t1 = box1.getText(); String t2 = box2.getText(); i = Integer.parseInt( t1 ); j = Integer.parseInt( t2 ); k = i + j; String s = Integer.toString( k ); box3. setText( s ); } } //上記のプログラムを書いたのですが、なぜかエラーが出てしまいます。勿論、自分でも見直しましたが、その理由がわかりませんでした。知識のある方、ご回答の方お願いします。

  • Java applet

    Java appletを使用する課題なのですが、 途中まで書いて、それから止まってしまっています。 アドバイスなど頂ければ嬉しいです。 課題は、 (1)右から左へ動く文字列左から右へ動く文字列とを表示 (2)文字列が消えたらまた出てくるようにする (3)マウスのクリックボタンを押すと止まり、離すと動きだすようにする (2)まで考えたプログラム(コンパイル、実行済)を以下に載せます。 import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class SasakiYui extends Applet implements Runnable{ Thread th = null; Graphics g; int x; public void init(){ setBackground(Color.white); } public void start(){ if(th == null){ th = new Thread(this); th.start(); } } public void run(){ while(!Thread.interrupted()){ for(x=600;x>-300;x=x-5){ repaint(); try{ Thread.sleep(50); } catch(InterruptedException e){} } } } public void paint(Graphics g){ g.drawString("Happy Brithday!",x,10); g.drawString("Happy Birthday!",600-x,40); } } (3)ができるようにするには、 addMouseListener(new Mouseadapter(){ public void mousePressed(MouseEvent e){……} を使用するのだろうとは思うのですが、 ・これを組み込むのはpublic void init(){の後で良いか ・……の部分に何を書けばいいのか の2点がわかりません; よろしければ、アドバイスお願い致します!

    • ベストアンサー
    • Java
  • Javaアプレットについてですが

    Javaアプレットでボタンを押したら数字が増えるものを作っているのですがどうもうまく動きません。 ソースは下の通りです。 変更しなければいけないところがあるならお願いします。 import java.applet.Applet; import java.awt.Graphics; import java.awt.Button; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class Sample7 extends Applet implements Runnable, ActionListener { Button bt; int num; public void init() { bt = new Button("開始"); add(bt); bt.addActionListener(this); Thread th; th = new Thread(this); th.start(); } public void actionPerformed(ActionEvent ae) { public void run() { try{ for(int i=0; i<11; i++){ num = i; repaint(); Thread.sleep(1000); } } catch(InterruptedException e){} } } public void paint(Graphics g) { String str = num + "です。"; g.drawString(str, 50, 50); } }

    • ベストアンサー
    • Java
  • Java for文

    for文について、キーボードで入力して、その数が素数(1またはその数以外で割り切れない数)であるかを判断するコードですが、for文とif文の関係が良くわかりません。ご教示ください。 <サンプル> public static void main(String[] args) throws IOException{ System.out.println("2以上の整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); ※1 for(int i=2; i<=num; i++){ if(i == num){ System.out.println(num + "は素数です。"); ※2 }else if(num % i == 0){ System.out.println(num + "は素数ではありません。"); break; ※1と※2の処理について初心者でもわかるような解説をおねがいできますでしょうか? よろしくお願いいたします。

  • for文

    C言語の本を読んでいて、for文の(i=0;i<count;--i)とあるのですが for(i=0;i<count;i--)とどう違うのでしょうか?それぞれコンパイルした のですが、同じように実行できましたので、余計にわからなくなりました。

  • javaアプレット repaintのタイミング

    勉強を始めたばかりなので稚拙な質問ですがお許しください。 ユーザーからの入力→repaint→画面に反映→プログラムが処理→repaint→画面に反映 というターン制のような動かし方をしたいのですが、実際にはユーザーの入力の後、プログラムの処理を待ってからまとめてrepaintしてしまいます。 repaint()は再描画を要求しているだけに過ぎず、repaint()と書いた場所で即時に再描画されるわけではないそうですが、では具体的にすぐ再描画してほしい場合はどうすればいいのでしょうか? 例えばですが、「ボタンを押すとcountの値が+1され、四角がcount個描画される。その一秒後に、こちらが何もしなくてもcountが+2されてもう一度四角がcount個(つまりこの時点で合計三個)描画される」というのを作ってみました。 import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class question extends Applet implements ActionListener{ Button bt1; int count = 0; public void init(){ bt1 = new Button("start"); add(bt1); bt1.addActionListener(this); } public void actionPerformed(ActionEvent e) { if (e.getSource() == bt1) { bt1.setEnabled(false); count += 1; repaint(); try { Thread.sleep(1000); } catch (InterruptedException e1) { } count += 2; repaint(); bt1.setEnabled(true); } } public void paint(Graphics g){ for(int i = 0; i < count; i++){ g.drawRect(10, 10, 10 + i * 5, 10 + i * 5); } } } これではボタンを押すたびに3つずつ四角が増えているように外見上見えてしまいます。 ボタンを押すとしっかり1つ四角を表示してから一秒待って、2つ四角を増やす。という風にするためにはどうすればよいのでしょうか? どなたかご教示ください。 ちなみにpaintImmediatelyというものを見つけましたが、何故か使えず……(メソッドpaintImmediatelyは未定義ですと言われてしまう)

    • ベストアンサー
    • Java
  • java applet 上段に2×3、下段に1×3のボタンを作る

    タイトルのようなアプレットを作りたいのですがなぜか実行されません。どこがおかしいのでしょうか? (文字数制限のため省略) { private JButton bt[] = new JButton[9]; private JPanel pn[] = new JPanel[2]; int i; public void init() { Container cnt = getContentPane(); for(i=0; i<9; i++){ add(bt[i] = new JButton("")); } pn[0] = new JPanel(); pn[1] = new JPanel(); //上パネルに置くボタン6つ bt[0].setSize(80,80); bt[0].setLocation(0,0); bt[1].setSize(80,80); bt[1].setLocation(80,0); bt[2].setSize(80,80); bt[2].setLocation(160,0); bt[3].setSize(80,80); bt[3].setLocation(0,80); bt[4].setSize(80,80); bt[4].setLocation(80,80); bt[5].setSize(80,80); bt[5].setLocation(160,80); //下パネルに置くボタン3つ bt[6].setSize(80,80); bt[6].setLocation(0,200); bt[7].setSize(80,80); bt[7].setLocation(80,200); bt[8].setSize(80,80); bt[8].setLocation(160,200); //上パネルと下パネルの作成 pn[0].setLocation(0,0); pn[1].setLocation(0,200); //ボタンをパネルに付ける pn[0].add(bt[0]); pn[0].add(bt[1]); pn[0].add(bt[2]); pn[0].add(bt[3]); pn[0].add(bt[4]); pn[0].add(bt[5]); pn[1].add(bt[6]); pn[1].add(bt[7]); pn[1].add(bt[8]); //コンテナへ追加 cnt.add(pn[0]); cnt.add(pn[1]); } } 座標を指定してボタンを設置する方法にしたいと思っています。 ちなみに完成図はこのような感じにしたいです。 ↓ □□□ □□□ □□□

    • ベストアンサー
    • Java
  • 特殊なfor文について

    SJC-P 問題集 問13の疑問より for文について教えてください。 一般的なfor文だと次の形だと思うのですが for(int i = 0; i < 5; i ++){ //5回ループする } Animal [] animals = { new Animal(), new Cow() }; for( Animal a : オブジェクト配列animals ){ a.saySomething(); } のような場合、このfor文は 「オブジェクト配列の中にanimalsがあるまでの間、ループする」という意味を指しているのでしょうか? for( クラス名 オブジェクト名 : オブジェクト配列) の一文にある「:」← の役割は何なのでしょうか?

    • ベストアンサー
    • Java
  • javaのfor文が機能してないみたいなんですが・・

    javaプログラミングを始めて間もないものなんですが、for文にA~Bの文をいれるとループしなくなります。もしも、A~Bの文がなかったらループするんですが・・ A~Bの文をいれてループさせるにはどのようにすればよいのでしょうか?? String a[] = dir.list(); //dirはディレクトリ for( int i=0; i<a.length; i++ ) { File g = new File(dir,a[i]);     if( g.isDirectory() ) { System.out.println(i + ": " + a[i] + "(ディレクトリ)"); } if( g.isFile() ) { System.out.println(i + ": " + a[i] + "(ファイル)"); } File f =new File(a[i]);             //A InputStreamReader reader = new InputStreamReader (new FileInputStream (f), "jis"); BufferedReader breader = new BufferedReader (reader); OutputStreamWriter writer = new OutputStreamWriter (new FileOutputStream(t), "sjis"); BufferedWriter bwriter = new BufferedWriter(writer); int c; StringBuffer sb = new StringBuffer(); while ((c = breader.read()) != -1){ sb.append((char)c); } String mail = sb.toString(); String crlf2 = ""; int pos = mail.indexOf(crlf2) + crlf2.length(); bwriter.write (mail,pos,mail.length() -pos); bwriter.close(); breader.close();           //B }

    • ベストアンサー
    • Java
  • コンパイルエラーの対応

    下記のプログラムをコンパイルしたらエラーが発生しました。 プログラム自体は本をそのまま書き写したのですが、何がいけないのでしょう。 教えてください。よろしくお願いします。 Javaのバージョンは1.3.1です import java.applet.*; import java.awt.*; import java.awt.event.*; public class sample3 extends Applet implements ActionListener { Button bt; public void init() { bt = new Button("押します!"); bt.addActionListener(this); add(bt); } public void actionperformed(ActionEvent ae) { bt.setLabel("押しました!"); } } -----------------エラー内容----------------------- sample3.java:4: sample3 は abstract として宣言する必要があります。 actionPerformed(java.awt.event.ActionEvent) を sample3 で定義しません。 public class sample3 extends Applet implements ActionListener ^

    • ベストアンサー
    • Java
UCAMC820ABBKのフリッカーについて
このQ&Aのポイント
  • UCAMC820ABBKのオートフォーカスwebカメラを購入したのですが、フリッカー現象がひどく、何かアプリなどで修正できますでしょうか。
  • elecomのアシスタントなら60Hzと50Hzを変換してちらつきを抑えることができるようですが、C820には対応していないようです。
  • 何か良い方法がありましたら教えていただけると助かります。
回答を見る