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

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

gradle error "Cannot convert the provided notation to a File or URI" -

python - NameError: name 'subprocess' is not defined -