- ベストアンサー
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
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まあ一応 nonakada 氏の書いたようにリフレクションを使えばできない訳ではありませんが、普通はこんなことでわざわざこういう裏技のようなやり方を使うことはしません。 確かにクラスの名前が連番になっているのでループを使って簡略化できそうだと思われるのも解るのですが、実際にはこれはたまたま「人間にとって」各クラスの名前が似ているというだけで、「コンピュータにとっては」単にたくさんクラスがあるというだけでしかないのです。 従って、ここではループを使わずに一つ一つやるべきだと私は思います。
その他の回答 (2)
私も自信はありませんが bt[i].addActionListener(Class.forName("testActionListener" + i).newInstance()); じゃできないですかね? もちろんfor文で・・・
お礼
ご返答ありがとうございます。 上の通りためしてみましたが、コンパイルできませんでした。
- 003br005eed
- ベストアンサー率23% (6/26)
ちょっと自信はありませんができないと思いますよ
お礼
ご返答ありがとうございます。 Java初心者の私にとって、できる事とできない事がまだ区別がつかないので参考になりました。
お礼
ご返答ありがとうございます。 わかりやすい説明でとてもよく理解できました。for文を使わず一つ一つやってみようかと思います。