java - Working with multiple panels in one frame -


i have problem want program switch between multiple panels in same frame. problems encountering can't set layout when panels switch , after switch content lowering pixel pixel. here code.

import java.awt.dimension; import java.awt.eventqueue; import java.awt.flowlayout; import javax.swing.jframe;  public class main {      public static boolean logged_in = false;      public static int width = 200, height = 400;      public static void main(string[] args) {         eventqueue.invokelater(new runnable() {             public void run() {                 try {                     dimension d = new dimension(width, height);                     first frame = new first();                          frame.setdefaultcloseoperation(jframe.exit_on_close);                     frame.setsize(d);                     frame.setlocationrelativeto(null);                     frame.setvisible(true);                     frame.setresizable(true);                     frame.setlayout(new flowlayout());                   } catch (exception e) {                      e.printstacktrace();                     }             }         });     } } 

and here 2 classes hold frames.

import java.awt.flowlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.jtextfield;   public class first extends jframe {      jpanel contentpane;     private jbutton button_1;     private jtextfield text;      public first(){          contentpane = new jpanel();         setcontentpane(contentpane);          button_1 = new jbutton("second frame");         button_1.setvisible(true);         text = new jtextfield(20);         text.setvisible(true);          contentpane.add(button_1);         contentpane.add(text);          thehandler handler = new thehandler();          button_1.addactionlistener(handler);     }      private class thehandler implements actionlistener {          public void actionperformed(actionevent event) {              if (event.getsource() == button_1) {                 contentpane.removeall();                 contentpane.invalidate();                 second frame = new second();                 frame.setdefaultcloseoperation(jframe.exit_on_close);                 frame.setlocationrelativeto(null);                 frame.setresizable(true);                 frame.setlayout(new flowlayout());                 frame.contentpane.setvisible(true);                 contentpane.add(frame.contentpane);                 ((jpanel) contentpane).revalidate();                 contentpane.setsize(200, 400);                 contentpane.repaint();             }         }     } } 

and second one

import java.awt.flowlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.jtextfield;   public class second extends jframe {      jpanel contentpane;     private jbutton button_1;     private jtextfield text;      public second(){          contentpane = new jpanel();         setcontentpane(contentpane);          button_1 = new jbutton("first frame");         button_1.setvisible(true);         text = new jtextfield(20);         text.setvisible(true);          contentpane.add(button_1);         contentpane.add(text);          thehandler handler = new thehandler();          button_1.addactionlistener(handler);     }      private class thehandler implements actionlistener {          public void actionperformed(actionevent event) {              if (event.getsource() == button_1) {                 contentpane.removeall();                 contentpane.invalidate();                 first frame = new first();                 frame.setdefaultcloseoperation(jframe.exit_on_close);                 frame.setlocationrelativeto(null);                 frame.setresizable(true);                 frame.setlayout(new flowlayout());                 frame.contentpane.setvisible(true);                 contentpane.add(frame.contentpane);                 ((jpanel) contentpane).revalidate();                 contentpane.setsize(200, 400);                 contentpane.repaint();             }         }     } } 

any appreciated. please keep in mind not java gui. ty.

edit after lot of time searching answer got one. isn't perfect post future reference or if else needs solution. here code.

main frame holds panels:

import javax.swing.jframe; import javax.swing.jpanel;  public class mainframe extends jframe {      public static jpanel main_panel;     private static firstframe first;      public mainframe(){          setlayout(null);             setsize(400, 400);         setlocationrelativeto(null);         setresizable(true);         setdefaultcloseoperation(exit_on_close);          main_panel = new jpanel();         main_panel.setbounds(0, 0, 400, 400);         add(main_panel);          main_panel.invalidate();         main_panel.removeall();          first = new firstframe();         main_panel.add(first);         main_panel.revalidate();         main_panel.repaint();     }      public static void main(string[] args) {         mainframe frame = new mainframe();         frame.setvisible(true);     } } 

first panel:

import java.awt.dimension; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jbutton; import javax.swing.jpanel;  public class firstframe extends jpanel {      private jbutton button;      public firstframe() {          jpanel panel = new jpanel();          panel.setpreferredsize(new dimension(400, 400));         panel.setlayout(null);          button = new jbutton("first");         button.setbounds(20, 20, 200, 40);         button.setvisible(true);          thehandler handler = new thehandler();          button.addactionlistener(handler);          panel.add(button);          add(panel);         revalidate();         repaint();     }     private class thehandler implements actionlistener {          public void actionperformed(actionevent event) {             if (event.getsource() == button) {                 mainframe.main_panel.invalidate();                 mainframe.main_panel.removeall();                 secondframe frame = new secondframe();                 mainframe.main_panel.add(frame);                 mainframe.main_panel.revalidate();                 mainframe.main_panel.repaint();             }         }     } } 

second:

import java.awt.dimension; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jbutton; import javax.swing.jpanel;  public class secondframe extends jpanel {      private jbutton button;      public secondframe() {         jpanel panel = new jpanel();          panel.setpreferredsize(new dimension(400, 400));         panel.setlayout(null);          button = new jbutton("second");         button.setbounds(20, 20, 200, 40);         button.setvisible(true);          thehandler handler = new thehandler();          button.addactionlistener(handler);          panel.add(button);          add(panel);         revalidate();         repaint();     }     private class thehandler implements actionlistener {          public void actionperformed(actionevent event) {             if (event.getsource() == button) {                 mainframe.main_panel.invalidate();                 mainframe.main_panel.removeall();                 thirdframe frame = new thirdframe();                 mainframe.main_panel.add(frame);                 mainframe.main_panel.revalidate();                 mainframe.main_panel.repaint();             }         }     } } 

and third:

import java.awt.dimension; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jbutton; import javax.swing.jpanel;  public class thirdframe extends jpanel {      private jbutton button;      public thirdframe() {         jpanel panel = new jpanel();          panel.setpreferredsize(new dimension(400, 400));         panel.setlayout(null);          button = new jbutton("third");         button.setbounds(20, 20, 200, 40);         button.setvisible(true);          thehandler handler = new thehandler();          button.addactionlistener(handler);          panel.add(button);          add(panel);         revalidate();         repaint();     }     private class thehandler implements actionlistener {          public void actionperformed(actionevent event) {             if (event.getsource() == button) {                 mainframe.main_panel.invalidate();                 mainframe.main_panel.removeall();                 firstframe frame = new firstframe();                 mainframe.main_panel.add(frame);                 mainframe.main_panel.revalidate();                 mainframe.main_panel.repaint();             }         }     } } 

as can see can switch panel 1 ->2 ->3 , 1 not second one. ty answers helpful. further suggestions welcome.

the solution use card layout. simple,

  1. create panel card layout in other children panels added unique string reference.
  2. invoke show method of cardlayout pick panel take in front (docs )

check following code.

  final jpanel mainpanel=new jpanel();     jpanel panelone=new jpanel();     jpanel paneltwo=new jpanel();     final cardlayout card=new cardlayout();     mainpanel.setlayout(card);     mainpanel.add(panelone, "one"); // id 1 refers panelone     mainpanel.add(paneltwo, "two"); // id 2 refers paneltwo      panelone.add(new jlabel("first panel"));     jbutton btn1=new jbutton("show second");     panelone.add(btn1);     btn1.addactionlistener(new actionlistener(){public void actionperformed(actionevent ae){     card.show(mainpanel, "two"); // shows paneltwo     }});    paneltwo.add(new jlabel("second panel"));     jbutton btn2=new jbutton("show first");     paneltwo.add(btn2);     btn2.addactionlistener(new actionlistener(){public void actionperformed(actionevent ae){     card.show(mainpanel, "one"); // shows panelone     }}); 

Popular posts from this blog

How to calculate SNR of signals in MATLAB? -

c# - Attempting to upload to FTP: System.Net.WebException: System error -

ios - UISlider customization: how to properly add shadow to custom knob image -