java - CardLayout, panels from separate class not showing -
i'm making first gui rather simple board game. besides game view need main menu , other views too. unfortunately gui looking uglier me in morning, entire menu structure in 1 class. i'm using card layout switch between different views, figured separate views different classes. sadly, ran problems. got blank window.
after 4 hours of reserach haven't been able solve problem i'm asking guys, have idea what's wrong code? tough think i've ruled out obvious problems (not adding panels panel card layout, not setting layout etc.) still think problem must simple. yet nothing i've found, has helped.
so business, here's "base gui"
package teekkariloikka.gui; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class tlgui extends jframe { private static final long serialversionuid = 1l; private static final int width = 1000; private static final int height = 800; private static final string mainmenu = "mainmenu"; private static final string game = "game"; private jpanel basepanel; private gameviewpanel gameviewpanel; private mainmenupanel mainmenupanel; jframe frame = new jframe(); //layout private cardlayout cardl = new cardlayout(); public tlgui(){ //frame stuff frame.settitle("teekkariloikka"); frame.setsize(width, height); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setvisible(true); frame.setresizable(false); //this panel add ohter panels menu , game basepanel = new jpanel(); basepanel.setlayout(cardl); //creating panels want add. excuse confusing naming. gameviewpanel = new gameviewpanel(); mainmenupanel = new mainmenupanel(); //adding panels basepanel basepanel.add(mainmenupanel, mainmenu); basepanel.add(gameviewpanel, game); cardl.show(basepanel, mainmenu); //adding basepanel frame frame.add(basepanel); //action listeners buttons. take @ classes. mainmenupanel.setnewgamebuttonlistener(new actionlistener(){ @override public void actionperformed(actionevent e){ cardl.show(basepanel, game); } }); gameviewpanel.setmainmenubuttonlistener(new actionlistener(){ @override public void actionperformed(actionevent e){{ cardl.show(basepanel, mainmenu); } }); } public static void main(string[] args){ swingutilities.invokelater(new runnable() { @override public void run(){ new tlgui(); } }); } }
then mainmenupanel class. it's work in progress should @ least show buttons. tried best translate had written in finnish (my mother tongue) , hope i'm not blind code forgot something.
package teekkariloikka.gui; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class mainmenupanel extends jpanel{ private static final long serialversionuid = 1l; //buttons private jpanel panel; private jbutton newgamebutton; private jbutton quitbutton; //font font menufont = new font("arial", font.bold, 24); //layout private gridbaglayout menulayout = new gridbaglayout(); private gridbagconstraints c1 = new gridbagconstraints(); public mainmenupanel(){ panel = new jpanel(); //for testing //todo remove panel.setbackground(color.black); newgamebutton = new jbutton("new game"); quitbutton = new jbutton("quit"); //new game -button newgamebutton.setpreferredsize(new dimension(200, 100)); newgamebutton.setfont(menufont); //quit-button quitbutton.setpreferredsize(new dimension(200, 100)); quitbutton.setfont(menufont); panel.setlayout(menulayout); c1.insets = new insets(10, 10, 10, 10); c1.gridx = 0; c1.gridy = 1; panel.add(newgamebutton, c1); c1.gridx = 0; c1.gridy = 2; panel.add(quitbutton, c1); } //idea: http://stackoverflow.com/questions/19104014/add-an-actionlistener-to-a-jbutton-from-another-class public void setnewgamebuttonlistener(actionlistener listener){ newgamebutton.addactionlistener(listener); } public void setquitbuttonlistener(actionlistener listener){ quitbutton.addactionlistener(listener); } }
and gameviewpanel class. work in progress previous class, should fine.
package teekkariloikka.gui; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; public class gameviewpanel extends jpanel{ private static final long serialversionuid = 1l; private jbutton lopetabutton; private jbutton tallennabutton; private jbutton menubutton; borderlayout bordl = new borderlayout(); public gameviewpanel(){ jpanel gameviewpanel = new jpanel(); gameviewpanel.setlayout(bordl); gameviewpanel.setborder(new emptyborder(10, 10, 10, 10)); //creating toolbar jtoolbar toolbar = new jtoolbar(); toolbar.setfloatable(false); gameviewpanel.setlayout(bordl); gameviewpanel.setborder(new emptyborder(10, 10, 10, 10)); gameviewpanel.add(toolbar, borderlayout.page_start); //buttons lopetabutton = new jbutton("lopeta"); menubutton = new jbutton("päävalikko"); tallennabutton = new jbutton("tallenna"); //adding buttons game view toolbar toolbar.add(lopetabutton); //todo add functionality! toolbar.add(tallennabutton); //todo add functionality! toolbar.add(menubutton); //todo add functionality! } public void setmainmenubuttonlistener(actionlistener listener){ menubutton.addactionlistener(listener); } }
i hope point out mistake i've made - not matter how stupid i'd feel.
also, other feedback highly appreciated. said, first time writing gui , must feel pretty lost time time.
in mainmenupanel
pane create instance of jpanel
...
public mainmenupanel(){ // new panel panel = new jpanel(); //for testing //todo remove panel.setbackground(color.black); newgamebutton = new jbutton("new game"); quitbutton = new jbutton("quit"); //new game -button newgamebutton.setpreferredsize(new dimension(200, 100)); newgamebutton.setfont(menufont); //quit-button quitbutton.setpreferredsize(new dimension(200, 100)); quitbutton.setfont(menufont); panel.setlayout(menulayout); c1.insets = new insets(10, 10, 10, 10); c1.gridx = 0; c1.gridy = 1; panel.add(newgamebutton, c1); c1.gridx = 0; c1.gridy = 2; panel.add(quitbutton, c1); // do panel?? }
but never add mainmenupanel
...
you same thing in gamemenu
...
public gameviewpanel(){ // create jpanel... jpanel gameviewpanel = new jpanel(); gameviewpanel.setlayout(bordl); gameviewpanel.setborder(new emptyborder(10, 10, 10, 10)); //creating toolbar jtoolbar toolbar = new jtoolbar(); toolbar.setfloatable(false); gameviewpanel.setlayout(bordl); gameviewpanel.setborder(new emptyborder(10, 10, 10, 10)); gameviewpanel.add(toolbar, borderlayout.page_start); //buttons lopetabutton = new jbutton("lopeta"); menubutton = new jbutton("päävalikko"); tallennabutton = new jbutton("tallenna"); //adding buttons game view toolbar toolbar.add(lopetabutton); //todo add functionality! toolbar.add(tallennabutton); //todo add functionality! toolbar.add(menubutton); //todo add functionality! // never it... }
my recommendation is, don't. both mainmenupanel
, gamemenu
extend jpanel
, create ui ontop of these panels directly. there doesn't seem need these "inner" panels...
Comments
Post a Comment