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
Post a Comment