質問: new button("yellow"); add(bt3); bt1.addactionlistener(this); } java初心者です。アプレットで上のようにボタンを作ります。それぞれが押された時に、red,blue,yellowが表示されるようにしたいのです。actionlistenerをインプリメントしているので、 public void actionperformed(actionevent ae) をオーバーライドする必要がありますが、そこで質問です。 ボタンを3種類別々に関連づけるには、actionperformed内をどのように記述したらよいでしょうか?また、init内はこれだけでいいんでしょうか? よろしくお願いします。
回答: これは色々やり方があります。 ボタンをメンバ変数として定義してactioneventの getsource()メソッドでeventが発生したobjectと 比較するとか、getsource()で取得したオブジェクト をbuttonにキャストしてからgetlabel()でラベルの 文字列を取得し任意の文字列と比較するとか。 他にはアクションコマンドで分岐する方法もあります。 ・メンバ変数の例 public class testbutton extends applet implements actionlistener { button btn1,btn2,bt3; public void init(){ btn1=new button("red"); add(btn1); btn2=new button("blue"); add(btn2); btn3=new button("yellow"); add(btn3); } public void actionperformed(actionevent e){ object obj=e.getsource(); if(obj == btn1){ // "red"の処理 } else if(obj == btn2){ // "blue"の処理 } else if(obj == btn3){ // "yellow"の処理 } } } ・ラベルで比較する例 public void acitonperformed(actionevent e){ object obj=e.getsource(); if(obj instanceof button){ button btn=(button)obj; string labstr=btn.getlabel(); if("red".equals(labstr)){ // "red"の処理 } else if("blue".equals(labstr)){ // "blue"の処理 } else if("yellow".equals(labstr)){ // "yellow"の処理 } } } ・アクションコマンドの例 public void actionperformed(actionevent e){ string cmdname=e.getactioncommand(); if("red".equals(cmdname)){ // "red"の処理 } else if("blue".equals(cmdname)){ // "blue"の処理 } else if("yellow".equals(cmdname)){ // "yellow"の処理 } } 制約が無ければアクションコマンドでの処理が私は好きです。