java - How do I pause a method until a button is pressed? -


i designing software multiple components - each own actionlistener. example, have jpanel cardlayout holds 10 cards - each own jpanel , purpose.

on 1 side, there multiple buttons, i.e. login, logout, settings, etc.

when click login, switch card using login() method login jpanel object want wait button click i.e. login, new user, or cancel before continuing login() method , setting current user.

is there method pause program until 1 of buttons clicked retrieve data it? (kind of how joptionpane.showinputmessage(null,"input string") waits you)

my code below: frame:

/**  * frame design  */   public class frame extends jframe{ jpanel leftside, upperrightside; employeeadder employadd; arraylist<serviceview> serviceviewers; chartviewer viewchart; paybyview viewpayby; settingsviewer viewsettings; loginviewer viewlogin; categoryview viewcategory; serviceadder serviceadd; directory directory; employee currentemployee; chargeviewer viewcharge; jbutton login, logout, settings; cardlayout leftcard,rightcard; string currentcard,currentrightcard; buttonlisten listen; public static string cardcat = "category view"; public static string cardpay = "pay by"; public static string cardchart = "chart view"; public static string cardlogin = "log-in view"; public static string cardserviceadd = "service adder";  frame(){     listen = new buttonlisten();     //-------current card--------------------     currentcard = cardcat;     currentrightcard = "charge";     //-----first find directory folder-------     startdirectory();     //-----user interface--------------------     //-------left side-----------------------     leftside = new jpanel();     leftcard = new cardlayout();         leftside.setlayout(leftcard);         viewpayby = new paybyview();         viewlogin = new loginviewer();         viewchart = new chartviewer();         viewcategory = new categoryview();         employadd = new employeeadder();         serviceadd = new serviceadder();         leftside.add(viewcategory,"cat");         leftside.add(viewchart, "cha");         leftside.add(viewlogin,"log");         leftside.add(viewpayby,"pay");         leftside.add(employadd,"ema");         leftside.add(serviceadd,"sea");         leftcard.show(leftside, "cat");         viewcategory.setenabled(false);         leftside.setborder(borderfactory.createtitledborder(borderfactory.createlineborder(color.black),currentcard));         serviceviewers = new arraylist<serviceview>();      //--------right side---------------------     jpanel rightside = new jpanel();         rightside.setlayout(new borderlayout());         upperrightside = new jpanel();         rightcard = new cardlayout();         upperrightside.setlayout(rightcard);             viewsettings = new settingsviewer();             viewcharge = new chargeviewer();             viewcharge.setenabled(false);             upperrightside.add(viewcharge,"charge");             upperrightside.add(viewsettings,"settings");             upperrightside.setpreferredsize(new dimension(350,500));         rightside.add(upperrightside,borderlayout.north);         //--------buttons @ bottom panel---         jpanel buttons = new jpanel();             buttons.setlayout(new gridlayout(3,1));             login = new jbutton("log-in");                 login.addactionlistener(listen);             logout = new jbutton("log out");                 logout.addactionlistener(listen);             settings = new jbutton("settings");                 settings.addactionlistener(listen);             buttons.add(login);             buttons.add(logout);             buttons.add(settings);             buttons.setpreferredsize(new dimension(350,150));         rightside.add(buttons,borderlayout.south);         rightside.setsize(new dimension(400,200));     //------other stuff--------------------------      //-----add panels----------------------------         setlayout(new borderlayout());         add(leftside,borderlayout.west);         add(rightside,borderlayout.east); }   private void login(){     leftcard.show(leftside, "log");      //----i want wait here action-------     int clicked = viewlogin.getclicked();         if (clicked==loginviewer.newuser){             newuser();         }else if (clicked==loginviewer.login){             if (viewlogin.checkpassword()){                 currentemployee = directory.getemployee(viewlogin.getselectedname());                 viewcategory.setenabled(true);                 viewcharge.setenabled(true);                 viewcharge.refreshname(currentemployee.getname());                 leftcard.show(leftside, "cat");             }         }else if (clicked==loginviewer.cancel){             leftcard.show(leftside, "cat");         }   }     public class buttonlisten implements actionlistener{     @override     public void actionperformed(actionevent e) {         if (!viewlogin.iswaiting()){         if (e.getsource()==login){             if (currentcard.equals(cardlogin)){                 leftcard.show(leftside,"cat");                 currentcard = cardcat;              }else{                 login();                 currentcard = cardlogin;             }         }else{             //don't change screen         }         }      }  }  } 

my code loginviewer:

public class loginviewer extends jpanel{ jcombobox user; jpasswordfield passfield; jbutton newuser, login, cancel; hashtable<string,string> namespass; //names , password private int clicked = -1; buttonlisten listen; public static int newuser = 1; public static int login = 0; public static int cancel = 2; boolean waiting;  loginviewer(){     waiting = false;     //---------------------------------------     setpreferredsize(new dimension(100,100));     listen = new buttonlisten();     namespass = new hashtable<string,string>();     //----------panel design-------------------     jpanel center = new jpanel();         center.setlayout(new gridlayout(3,3));     user = new jcombobox();     passfield = new jpasswordfield();     newuser = new jbutton("new user");         newuser.addactionlistener(listen);     login = new jbutton("login");         login.addactionlistener(listen);     cancel = new jbutton("cancel");         cancel.addactionlistener(listen);     center.add(new jlabel("choose user"));     center.add(user);     center.add(new jlabel(""));     center.add(new jlabel("type password"));     center.add(passfield);     center.add(new jlabel(""));     center.add(login);     center.add(newuser);     center.add(cancel);     center.setpreferredsize(new dimension(300,300));     center.setmaximumsize(new dimension(100,100));     center.setalignmentx(center_alignment);     setalignmentx(center_alignment);     setlayout(new boxlayout(this,boxlayout.x_axis));     add(box.createhorizontalglue());     add(center);     add(box.createhorizontalglue()); }   public void uploadusernames(hashtable<string,string> names){     namespass.clear();     namespass.putall(names);     user.removeallitems();     enumeration<string> name = names.keys();     while (name.hasmoreelements()){         user.additem(name.nextelement());     } }  public boolean checkpassword(){     boolean value = false;     string key = user.getselecteditem().tostring();     if (passfield.getpassword().length==4){         if (namespass.get(key).equals(string.valueof(passfield.getpassword()))){             value = true;         }     }     return value; }  public string getselectedname(){     return user.getselecteditem().tostring(); }  public boolean iswaiting(){     return waiting; }  public int getclicked(){     waiting = true;     return clicked; }  public class buttonlisten implements actionlistener{     @override     public void actionperformed(actionevent e) {          waiting = false;         if (e.getsource()==newuser){             clicked = 1;         }else if (e.getsource()==login){             clicked = 0;         }else if (e.getsource()==cancel){             clicked = 2;         }      }  } } 

or easier use actionlistener listen of objects' buttons?

there lot of buttons...

note: of methods incomplete or test methods until know how make work...

you don't want use linear console-type code in swing gui. instead, event-driven gui programs want have user interactions change program's state, , have behavior of program depend on state. instance, rather have login method pause, have housekeeping -- change state of program ready accept login attempt -- , plan "wait", exit login method. have rest of code logging in reside in login button's actionlistener.

as aside, you've posted lot of code, 95% of unrelated problem , serving distraction , preventing reading code , understanding specifics of problem. in future, consider creating , posting sscce, condense code smallest bit still compiles, has no code that's not relevant problem, still demonstrates problem us.


Comments

Popular posts from this blog

Perl - how to grep a block of text from a file -

delphi - How to remove all the grips on a coolbar if I have several coolbands? -

javascript - Animating array of divs; only the final element is modified -