java - CardLayout not working properly -
i have written simple cardlayout example splitpane, combobox , few other panels containing buttons , label.
import java.awt.borderlayout; import java.awt.cardlayout; import java.awt.container; import java.awt.eventqueue; import java.awt.event.itemevent; import java.awt.event.itemlistener; import javax.swing.jbutton; import javax.swing.jcombobox; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.jsplitpane; import javax.swing.jtextfield; import javax.swing.border.emptyborder; public class splitpane_test extends jframe implements itemlistener { private jpanel contentpane; final static string buttonpanel = "card jbuttons"; final static string textpanel = "card jtextfield"; jpanel cards; public static void main(string[] args) { eventqueue.invokelater(new runnable() { public void run() { try { splitpane_test frame = new splitpane_test(); //frame.addcomponenttopane(frame.getcontentpane()); frame.setvisible(true); } catch (exception e) { e.printstacktrace(); } } }); } public splitpane_test() { setdefaultcloseoperation(jframe.exit_on_close); setbounds(100, 100, 450, 300); contentpane = new jpanel(); contentpane.setborder(new emptyborder(5, 5, 5, 5)); contentpane.setlayout(new borderlayout(0, 0)); setcontentpane(contentpane); jsplitpane splitpane = new jsplitpane(); contentpane.add(splitpane, borderlayout.center); jpanel comboboxpane = new jpanel(); string comboboxitems[] = {buttonpanel, textpanel}; jcombobox cb = new jcombobox(comboboxitems); cb.seteditable(false); cb.additemlistener(this); comboboxpane.add(cb); splitpane.setleftcomponent(comboboxpane); //create "cards". jpanel card1 = new jpanel(); card1.add(new jbutton("button 1")); card1.add(new jbutton("button 2")); card1.add(new jbutton("button 3")); jpanel card2 = new jpanel(); card2.add(new jtextfield("textfield", 20)); //create panel contains "cards". cards = new jpanel(); cards.add(card1, buttonpanel); cards.add(card2, textpanel); splitpane.setrightcomponent(cards); cards.setlayout(new cardlayout(0, 0)); } @override public void itemstatechanged(itemevent e) { // todo auto-generated method stub system.out.print("event triggered \n"); cardlayout cl = (cardlayout) (cards.getlayout()); cl.show(cards, textpanel); } }
i can see splitpane combobox on left , other cardlayout panels on right. when change combobox items nothing happening on right size. in order verify if iam hitting cardout used system.out.print("event triggered \n"); surprising thing have seen displaying twice each combobox item change if calling twice
event triggered event triggered
can please suggest me iam doing wrong here , why event triggered getting hit twice. time , help.
set layout manager before adding components.
two items changing state; 1 being deselected, other selected. improve debugging output following:
system.out.println("event triggered: " + e);
you'll need account event switching selection back--not changes in combo box should select textpanel
.
Comments
Post a Comment