java - JButton listener not firing -
i seperated codes mvc model , confirm button action listener not printing username , password though added actionlistener it. please thanks.
codes
logindialog.java
import java.awt.borderlayout; import java.awt.flowlayout; import java.awt.gridbagconstraints; import java.awt.gridbaglayout; import java.awt.insets; import java.awt.event.actionlistener; import javax.swing.jbutton; import javax.swing.jdialog; import javax.swing.jlabel; import javax.swing.jpanel; import javax.swing.jpasswordfield; import javax.swing.jtextfield; @suppresswarnings("serial") public class logindialog extends jdialog { private jlabel namelabel; private jlabel passwordlabel; private jtextfield usernametf; private jpasswordfield passwordtf; private jbutton confirmbtn; private jbutton cancelbtn; private jpanel toppanel; private jpanel buttonpanel; private gridbagconstraints gbc; public logindialog() { this.settitle("authentication"); toppanel = new jpanel(new gridbaglayout()); buttonpanel = new jpanel(new flowlayout(flowlayout.center)); namelabel = new jlabel("name : "); passwordlabel = new jlabel("password : "); usernametf = new jtextfield(); passwordtf = new jpasswordfield(); confirmbtn = new jbutton("confirm"); cancelbtn = new jbutton("cancel"); buttonpanel.add(confirmbtn); buttonpanel.add(cancelbtn); gbc = new gridbagconstraints(); gbc.insets = new insets(4, 4, 4, 4); gbc.gridx = 0; gbc.gridy = 0; gbc.weightx = 0; toppanel.add(namelabel, gbc); gbc.gridx = 1; gbc.gridy = 0; gbc.fill = gridbagconstraints.horizontal; gbc.weightx = 1; toppanel.add(usernametf, gbc); gbc.gridx = 0; gbc.gridy = 1; gbc.fill = gridbagconstraints.none; gbc.weightx = 0; toppanel.add(passwordlabel, gbc); gbc.fill = gridbagconstraints.horizontal; gbc.gridx = 1; gbc.gridy = 1; gbc.weightx = 1; toppanel.add(passwordtf, gbc); this.add(toppanel); this.add(buttonpanel, borderlayout.south); } public void showlogindialog() { logindialog ld = new logindialog(); ld.setsize(400, 150); ld.setvisible(true); ld.setlocationrelativeto(null); } public string getusername() { return usernametf.gettext(); } public string getpassword() { return new string(passwordtf.getpassword()); } public void confirmbtnlistner(actionlistener listener) { confirmbtn.addactionlistener(listener); } } controller.java
import java.awt.event.actionevent; import java.awt.event.actionlistener; public class controller { private logindialog logindialog; public controller(logindialog logindialog) { this.logindialog = logindialog; logindialog.showlogindialog(); logindialog.confirmbtnlistner(new btnlistener()); } class btnlistener implements actionlistener { @override public void actionperformed(actionevent e) { system.out.println(logindialog.getusername()); system.out.println(logindialog.getpassword()); } } public static void main(string[] args) { logindialog logindialog = new logindialog(); new controller(logindialog); } }
you having 2 instances of logindialog class.
one creating in controller , other 1 in logindialog#showlogindialog() method.
let's list them:
1st instance - in controller class named `logindialog` 2nd instance - in `logindialog` class named `ld` here ld object created within logindialog object. 2 different jdialog objects. when call
logindialog.showlogindialog() another object ld created within method. jdialog refered set visible by:
ld.setvisible(true) so now,
object `ld` visible , object `logindialog` not yet visible havent done `logindialog.setvisible(true)` yet. now adding actionlistener button within logindialog object, not yet visible. while there no actionlistener added button within ld object.
final conclusion:
- object
ldvisible, button within has noactionlistener. - object
logindialognot yet visible. button within hasactionlistener. - the button clicking part of
ldobject has no action listener associated it. - the button has
actionlistenerassociated part oflogindialogobject not visible.
wanna check if right?
just add these lines in controller constructor:
logindialog.setvisible(true); logindialog.setsize(400, 150); logindialog.setlocationrelativeto(null); i won't give full solution don't spoonfeed here on stack overflow. it's challange adjust code accordingly. :)
Comments
Post a Comment