条件分岐内での配列一括処理
配列によって生成された同様の多数オブジェクト。
この中から1個選択し、イベント処理をしたい。
配列の長さが短いのならば、それぞれのオブジェクトに対して
if(e.getSource() == ***[0]){ -処理内容- } if(e.getSource() == ***[1]){ -処理内容- }
と、ひとつひとつ書いていってもいいが、配列が長くなればオブジェクトも増えてめんどくさい…
処理内容もまとめてあるから同じものを書いてるわけだし…
なら、一括にまとめて書こう!
色々調べてみると条件分岐では配列を扱う場合、
判断部分で対象の全てのオブジェクトの参照をもたなければいけない…らしい
なので、if文の前にfor文を追加しまわす?ことになる。
例
public void actionPerformed(ActionEvent ae){ for(int count = 0;count < 10;count++){ if(e.getSource() == ***[count]){ -処理内容- } } }
これを使って、簡単なサンプルを作ってみる。
サンプルコード
import java.awt.*; import java.awt.event.*; import javax.swing.BoxLayout; class ArrayAction extends Frame implements ActionListener{ MenuBar mBar = new MenuBar(); Menu mFile = new Menu("ファイル"); Menu mClr = new Menu("消去"); MenuItem[] cSC = new MenuItem[10]; TextField[] tf = new TextField[10]; MenuItem mExit = new MenuItem("終了"); int i,count; ArrayAction(){ setMenuBar(mBar); mBar.add(mFile); mFile.add(mClr); mFile.add(mExit); for(i = 0;i < 10;i++){ cSC[i] = new MenuItem("ボックス" + (i+1) + "の内容を消します"); cSC[i].addActionListener(this); mClr.add(cSC[i]); tf[i] = new TextField("テキストフィールド" + (i+1),20); setLayout(new BoxLayout(this,BoxLayout.Y_AXIS)); add(tf[i]); } mClr.addActionListener(this); mExit.addActionListener(this); this.pack(); this.setVisible(true); } public static void main(String[] args){ new ArrayAction(); } public void actionPerformed(ActionEvent ae){ for(count = 0;count < 10;count++){ if(ae.getSource() == cSC[count]){ tf[count].setText(""); } } if(ae.getSource() == mExit){ FileExit(); } } public void FileExit(){ this.dispose(); System.exit(0); } }
10個のメニューアイテムの中から1つ選択すると、対になっているテキストフィールドの内容が消える。
ちなみにめんどくさくてWindowListener書かなかったので終了はファイルメニューから…
眠くて変な表現になってそうですがこんな感じ。