java - Card Layout will originally switch panels, by why won't it switch after the start of the program? -
this question has answer here:
so i've encountered weird type of error. i'm using card layout switch between panel , user panel in gui. upon starting program card layout works expected , switch whenever user presses "h", if click of buttons or type in text fields can no longer switch card panel. looked through oracle docs found nothing. know causing issue?
import java.awt.cardlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.keyevent; import java.awt.event.keylistener; import javax.swing.jpanel; import javax.swing.timer; public class mainpanel extends jpanel implements keylistener{ cardlayout cl = new cardlayout(); userpanel = new userpanel(); helppanel hp = new helppanel(); private boolean showuserpanel = true; private timer maintimer = new timer(500, new actionlistener(){ public void actionperformed(actionevent event){ up.settippercent(); } }); //--------------------------------------------------------------------- //constructor public mainpanel(){ setlayout(cl); add(up, "userpanel"); add(hp, "helppanel"); cl.show(this, "userpanel"); addkeylistener(this); setfocusable(true); maintimer.start(); } //--------------------------------------------------------------------- //key listener methods public void keypressed(keyevent e) { int keycode = e.getkeycode(); if(keycode == e.vk_h && showuserpanel == true){ cl.show(this, "helppanel"); maintimer.stop(); showuserpanel = false; }else if(keycode == e.vk_h && showuserpanel == false){ cl.show(this, "userpanel"); showuserpanel = true; maintimer.start(); } } @override public void keyreleased(keyevent arg0) { // todo auto-generated method stub } @override public void keytyped(keyevent arg0) { // todo auto-generated method stub } }
this userpanel
class
import java.awt.*; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.buttongroup; import javax.swing.jbutton; import javax.swing.jpanel; import javax.swing.jradiobutton; import javax.swing.jtextarea; import javax.swing.jtextfield; //--------------------------------------------------------------------- public class userpanel extends jpanel{ //fields private jbutton calc; private jradiobutton fivep, tenp, fiftp, twenp; private buttongroup buttongroup; private double tipamount = 0.0; private jtextfield tiparea; private jtextarea totalarea; //--------------------------------------------------------------------- //constructor public userpanel(){ setbackground(color.black); tiparea = new jtextfield("enter bill amount"); totalarea = new jtextarea(""); setupbuttons(); tiparea.setpreferredsize(new dimension(300,40)); totalarea.setpreferredsize(new dimension(300,40)); } //--------------------------------------------------------------------- //setup jcomponents public void setupbuttons(){ calc = new jbutton("calculate tip"); calc.addactionlistener(new actionlistener(){ public void actionperformed(actionevent event){ calculatethetip(tipamount); } }); buttongroup = new buttongroup(); fivep = new jradiobutton("five percent"); tenp = new jradiobutton("ten percent"); fiftp = new jradiobutton("fifteen percent"); twenp = new jradiobutton("twenty percent"); buttongroup.add(fivep); buttongroup.add(tenp); buttongroup.add(fiftp); buttongroup.add(twenp); add(fivep); add(tenp); add(fiftp); add(twenp); add(tiparea); add(totalarea); add(calc); } //--------------------------------------------------------------------- //calculate total , display user public void calculatethetip(double total){ string thetotal = tiparea.gettext(); //take user input , make sure number try{ double billamount = double.parsedouble(thetotal); total = billamount*total; double totalamt = billamount + billamount*tipamount; totalarea.settext("tip: "+total+ " \ntotal: " + totalamt); }catch(numberformatexception e){ totalarea.settext("please enter amount without $ or text!"); } return; } //--------------------------------------------------------------------- //chose tippercent use public void settippercent(){ if(fivep.isselected()){ tipamount = .05; }else if(tenp.isselected()){ tipamount = .1; }else if(fiftp.isselected()){ tipamount = .15; }else{ tipamount = .2; } } }
this help panel
class
import java.awt.*; import javax.swing.jpanel; public class helppanel extends jpanel{ public helppanel(){ setbackground(color.black); } }
pressing button, etc, takes focus away mainpanel
. keyevent
s being sent object has focus instead of mainpanel
.
i suggest creating keylistener
separate object , adding other components.
Comments
Post a Comment