java - Consolidating Action Listeners of Buttons In Random Number Game -


i'm relatively new java, , had question game wrote. it's random number game try guess number 1-10 in least number of guesses.

i got program work, code seems inefficient. is, creating jbutton each number, creating separate action listener each button, (a lot has been omitted simplicity's sake , because irrelevant question):

note: int number = random number chosen program, , int guesscounter = number keeps track of number of guesses

 public class random extends jframe{   //creating buttons   jbutton 1 = new jbutton("1");  jbutton 2 = new jbutton("2");  jbutton 3 = new jbutton("3");      public static void main(string[] args){      //creating action listeners          oneclass uno = new oneclass();         one.addactionlistener(uno);          twoclass dos = new twoclass();         two.addactionlistener(dos);          threeclass tres = new threeclass();         three.addactionlistener(tres);          //action listener button 1          private class oneclass implements actionlistener{             public void actionperformed(actionevent event){                 if(number == 1){                     guesscounter++;                     joptionpane.showmessagedialog(null,"correct! guessed correct number in " + guesscounter + " guesses","correct!", joptionpane.plain_message);                 }else if(number > 1){                     guesscounter++;                     joptionpane.showmessagedialog(null,"incorrect. guess higher. have guessed " + guesscounter + " time(s).","incorrect", joptionpane.plain_message);                     one.setenabled(false);                 }else if(number < 1){                  }             }          }          //action listener button 2          private class twoclass implements actionlistener{             public void actionperformed(actionevent event){                 if(number == 2){                     guesscounter++;                     joptionpane.showmessagedialog(null,"correct! guessed correct number in " + guesscounter + " guesses","correct!", joptionpane.plain_message);                 }else if(number > 2){                     guesscounter++;                     joptionpane.showmessagedialog(null,"incorrect. guess higher. have guessed " + guesscounter + " time(s).","incorrect", joptionpane.plain_message);                     two.setenabled(false);                 }else if(number < 2){                     guesscounter++;                     joptionpane.showmessagedialog(null, "incorrect. guess lower. have guessed " + guesscounter + " time(s)","incorrect", joptionpane.plain_message);                     two.setenabled(false);                 }             }         }          //action listener button 3          private class threeclass implements actionlistener{             public void actionperformed(actionevent event){                 if(number == 3){                     guesscounter++;                     joptionpane.showmessagedialog(null,"correct! guessed correct number in " + guesscounter + " guesses","correct!", joptionpane.plain_message);                 }else if(number > 3){                     guesscounter++;                     joptionpane.showmessagedialog(null,"incorrect. guess higher. have guessed " + guesscounter + " time(s).","incorrect", joptionpane.plain_message);                     three.setenabled(false);                 }else if(number < 3){                     guesscounter++;                     joptionpane.showmessagedialog(null, "incorrect. guess lower. have guessed " + guesscounter + " time(s)","incorrect", joptionpane.plain_message);                     three.setenabled(false);                 }             } 

one can see inefficiency can prevalent when each action listener long. my question is, possible condense (even if action listener each button requires random number compared different number)? long, , become extremely long start adding more difficult levels more numbers chose from.

yes, can write listener shared buttons. can "action command" of listener, text of button. can convert string actual number using integer.parseint(...) method. can invoke general logic.

here example of shared listener simulates keys of calculator:

import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*;  public class calculatorpanel extends jpanel {     private jtextfield display;      public calculatorpanel()     {         action numberaction = new abstractaction()         {             @override             public void actionperformed(actionevent e)             { //              display.setcaretposition( display.getdocument().getlength() );                 display.replaceselection(e.getactioncommand());             }         };          setlayout( new borderlayout() );          display = new jtextfield();         display.seteditable( false );         display.sethorizontalalignment(jtextfield.right);         add(display, borderlayout.north);          jpanel buttonpanel = new jpanel();         buttonpanel.setlayout( new gridlayout(0, 5) );         add(buttonpanel, borderlayout.center);          (int = 0; < 10; i++)         {             string text = string.valueof(i);             jbutton button = new jbutton( text );             button.addactionlistener( numberaction );             button.setborder( new lineborder(color.black) );             button.setpreferredsize( new dimension(50, 50) );             buttonpanel.add( button );              inputmap inputmap = button.getinputmap(jcomponent.when_in_focused_window);             inputmap.put(keystroke.getkeystroke(text), text);             inputmap.put(keystroke.getkeystroke("numpad" + text), text);             button.getactionmap().put(text, numberaction);         }     }      private static void createandshowui()     { //      uimanager.put("button.margin", new insets(10, 10, 10, 10) );          jframe frame = new jframe("calculator panel");         frame.setdefaultcloseoperation( jframe.exit_on_close );         frame.add( new calculatorpanel() );         frame.pack();         frame.setlocationrelativeto( null );         frame.setvisible(true);     }      public static void main(string[] args)     {         eventqueue.invokelater(new runnable()         {             public void run()             {                 createandshowui();             }         });     } } 

Comments

Popular posts from this blog

java - Spring Data JPA: Why findOne(id) executing delete query internally? -

python - Mongodb How to add addtional information when aggregating? -

java - Incorrect order of records in M-M relationship in hibernate -