java - I have 9 JButtons in the ArrayList . But I am not able to change the Lable of the Buttons in any event,,, -


import java.awt.dimension; import java.awt.flowlayout; import java.awt.panel; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.util.arraylist;  import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.joptionpane;  class 1 implements actionlistener {     jframe frame = new jframe();     arraylist<jbutton> myb = new arraylist<jbutton>();     panel p = new panel();     dimension d = new dimension(20, 20);     string s = "", s1 = "";     jbutton b = new jbutton(), b1 = new jbutton();      public void addbuttons()     {         for(int = 0; < 9; i++)         {             myb.add(new jbutton());         //imp         }     }      public void display()     {         frame.getcontentpane().add(p);         for(jbutton btn : myb)         {             btn.setpreferredsize(d);             p.add(btn);        //imp         }         p.setlayout(new flowlayout(flowlayout.center, 20, 5));         frame.setdefaultcloseoperation(jframe.exit_on_close);         frame.setsize(200, 300);         frame.setvisible(true);     }      public void gameplay()     {         s = joptionpane.showinputdialog(null, "human or computer");         if(s.equals("human"))         {             for(jbutton b1 : myb)             {// advanced loop                 b1.addactionlistener(this);             }         }         else         {             s1 = "computer";         }     }      @override     public void actionperformed(actionevent e)     {         // todo auto-generated method stub         system.out.println(" action performed!!");         b1.settext("x");     } }  public class 2 {     public static void main(string[] args)     {         1 = new one();         a.addbuttons();         a.display();         a.gameplay();     } } 

i think confusing b1 button in list, , calling settext in wrong button. if want change label of clicked button, quick fix be.

public void actionperformed(actionevent e) {     // todo auto-generated method stub      system.out.println(" action performed!!");     b1 = (jbutton)e.getsource();     b1.settext("x");  } 

you should have split actionlistener differnt class avoid confusion this. apply text button in list, can try this.

class myactionlistener implements actionlistener{      arraylist<jbutton> buttonlist;     public myactionlistener(arraylist<jbutton> a) {         buttonlist = a;     }     @override     public void actionperformed(actionevent e) {         // todo auto-generated method stub         for(jbutton jb: buttonlist) {             jb.settext("x");         }     } }   class 1 {     myactionlistener buttonlistener;     ...     public void gameplay() {     ...         if(s.equals("human")) {             buttonlistener = new myactionlistener(myb);             for(jbutton b1 : myb) {                 b1.addactionlistener(buttonlistener);         }     ...     } 

}

basically, create own action listener contain appropriate data want.


Comments

Popular posts from this blog

objective c - Change font of selected text in UITextView -

php - Accessing POST data in Facebook cavas app -

c# - Getting control value when switching a view as part of a multiview -