Sunday, 15 May 2011

java - How to send an ActionPerformed from an ActionListener to another ActionListener? -



java - How to send an ActionPerformed from an ActionListener to another ActionListener? -

i've got frame (named here "mainapplication"), has jpanel show informations, depending on context.

on startup, mainapplication has empty jpanel.

it creates "loginrequest" class, creates simple login/password form, , send mainapplication, displays in jpanel.

the "loginrequest" class implements actionlistener, when user clicks on "login" button, checks wheter or not login/password correct, and, if user granted, want unload form, , display main screen on mainapplication frame.

so, it, came :

public class loginrequest implements actionlistener { protected mainapplication owner_m = null; public loginrequest(mainapplication owner_p) { owner_m = owner_p; } @override public void actionperformed(actionevent event_p) { // user clicked "login" button if (event_p.getactioncommand().equals("requestlogin")) { // check if login/password right if (getparameters().isusergranted(login_l, password_l)) { // send actionevent "mainapplication", // notified display next screen this.owner_m.actionperformed( new java.awt.event.actionevent(this, 0, "showsummary") ); } else { messagelabel_m.setforeground(color.red); messagelabel_m.settext("incorrect user or password"); } } } }

then, "mainapplication" class (which extends jframe) :

public class mainapplication extends jframe implements actionlistener { protected void load() { // create panel display info mainpanel_m = new jpanel(); // on startup, populate panel login/password form mainpanel_m.add(new loginrequest(this).getloginform()); this.add(mainpanel_m); } @override public void actionperformed(actionevent event_p) { // show summary on request if (event_p.getactioncommand().equals("showsummary")) { // remove previous info on panel // (which displayed login form on example) mainpanel_m.removeall(); // , populate panel other informations, class mainpanel_m.add(...); ... ... } // , refresh gui this.validate(); this.repaint(); this.pack(); } }

when actionevent sent "loginrequest" class "mainapplication" class, executes code, @ end, nil happens, if jframe wasn't repainted.

any ideas ?

thanks,

the best way utilize jdialog (main frame jframe parent component) login form , cardlayout switch between panels (so there no need removing, repainting , revalidating):

your main form should this:

import javax.swing.*; import java.awt.*; import java.awt.event.actionevent; import java.awt.event.actionlistener; public class mainframe{ jframe frame = new jframe("main frame"); jpanel welcomepanel = new jpanel(); jpanel workspacepanel = new jpanel(); jpanel cardpanel = new jpanel(); jbutton btnlogin = new jbutton("login"); jlabel lblwelcome = new jlabel("welcome workspace"); cardlayout cl = new cardlayout(); loginrequest lr = new loginrequest(this); public mainframe() { welcomepanel.add(btnlogin); btnlogin.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { lr.setvisible(true); } }); workspacepanel.add(lblwelcome); cardpanel.setlayout(cl); cardpanel.add(welcomepanel, "1"); cardpanel.add(workspacepanel, "2"); cl.show(cardpanel,"1"); frame.getcontentpane().add(cardpanel); frame.setdefaultcloseoperation(jframe.dispose_on_close); frame.setpreferredsize(new dimension(320,240)); frame.pack(); frame.setlocationbyplatform(true); frame.setvisible(true); } public static void main(string [] args){ swingutilities.invokelater(new runnable() { @override public void run() { new mainframe(); } }); } }

your login form should this:

import javax.swing.*; import java.awt.*; import java.awt.event.actionevent; import java.awt.event.actionlistener; public class loginrequest extends jdialog{ /**you can add, jtextfields, jlabel, jpasswordfield..**/ jpanel panel = new jpanel(); jbutton btnlogin = new jbutton("login"); public loginrequest(final mainframe mf) { settitle("login"); panel.add(btnlogin); btnlogin.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { //put login logic here mf.cl.show(mf.cardpanel,"2"); dispose(); } }); add(panel, borderlayout.center); setmodalitytype(modalitytype.application_modal); setdefaultcloseoperation(jdialog.dispose_on_close); pack(); setlocationbyplatform(true); } }

edit:

your way:

mainframe class:

import javax.swing.*; import java.awt.*; import java.awt.event.actionevent; import java.awt.event.actionlistener; public class mainframe{ jframe frame = new jframe("main frame"); jpanel welcomepanel = new jpanel(); jpanel workspacepanel = new jpanel(); jpanel cardpanel = new jpanel(); jbutton btnlogin = new jbutton("login"); jlabel lblwelcome = new jlabel("welcome"); loginrequest lr = new loginrequest(this); public mainframe() { welcomepanel.add(btnlogin); btnlogin.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { lr.setvisible(true); } }); workspacepanel.add(lblwelcome); frame.getcontentpane().add(welcomepanel); frame.setdefaultcloseoperation(jframe.dispose_on_close); frame.setpreferredsize(new dimension(320,240)); frame.pack(); frame.setlocationbyplatform(true); frame.setvisible(true); } public static void main(string [] args){ swingutilities.invokelater(new runnable() { @override public void run() { new mainframe(); } }); } }

loginrequest class:

import javax.swing.*; import java.awt.*; import java.awt.event.actionevent; import java.awt.event.actionlistener; public class loginrequest extends jdialog{ /**you can add, jtextfields, jlabel, jpasswordfield..**/ jpanel panel = new jpanel(); jbutton btnlogin = new jbutton("login"); public loginrequest(final mainframe mf) { settitle("login"); panel.add(btnlogin); btnlogin.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { //put login logic here mf.frame.getcontentpane().removeall(); mf.frame.add(mf.workspacepanel); mf.frame.repaint(); mf.frame.revalidate(); dispose(); } }); add(panel, borderlayout.center); setmodalitytype(modalitytype.application_modal); setdefaultcloseoperation(jdialog.dispose_on_close); pack(); setlocationbyplatform(true); } }

java swing actionlistener

No comments:

Post a Comment