title: Adding JPanel from another class to JPanel in JFrame
body: <p>I can't get my JFrame from main class to display JPanel from another class. Everything compiles without errors.</p>
  
  <p><strong>JFrameTest.java:</strong></p>
  
  <pre><code>package jframetest;
  
  import java.awt.FlowLayout;
  import javax.swing.JButton;
  import javax.swing.JFrame;
  import javax.swing.JPanel;
  
  
  public class JFrameTest extends JFrame {
  
      public JFrameTest() {
  
          FlowLayout mainLayout = new FlowLayout();
          setSize(320, 480);
          setResizable(false);
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          setLayout(mainLayout);
  
          JPanel panelMain = new JPanel(mainLayout);
  
          JButton testButton = new JButton("Test12");
          panelMain.add(testButton);
  
          JPanelOne panel = new JPanelOne();
          panelMain.add(panel);
          panel.setVisible(true);
          add(panelMain);
  
  
  
      }
  
      public static void main(String[] arguments) {
  
          JFrameTest frame = new JFrameTest();
          frame.setVisible(true);
  
  
      }
  }
  </code></pre>
  
  <p><strong>JPanelOne.java:</strong></p>
  
  <pre><code>package jframetest;
  
  import java.awt.FlowLayout;
  import javax.swing.JButton;
  import javax.swing.JPanel;
  
  
  public class JPanelOne extends JPanel {
  
      public JPanelOne() {
  
          FlowLayout layoutPanel = new FlowLayout();
          JPanel panel = new JPanel(layoutPanel);
          JButton button = new JButton("test");
          panel.add(button);
          panel.setVisible(true);
  
      }
  
  }
  </code></pre>
  
  <p>Is it good practice to keep diffrent JPanels in their own classes? (Example: Wanting to have JFrame contain few same size JPanels, which will be switched by setting <strong>setVisible()</strong> to true/false)</p>
  
  <p><strong>EDIT</strong></p>
  
  <p>Thank you for all your answers. Noted. Now back to my question:</p>
  
  <p>Now that I know how to add single GUI elements created in other classes I want to know if it is possible to organize elements with layout manager in one of the classes (maybe in some other container than JPanel), so I can add them as a group organized in a layout (thats why I was asking about creating whole JPanel in other class). As on the picture:</p>
  
  <p><img src="https://i.stack.imgur.com/vAEmt.jpg" alt=""></p>
  
  <p>JPanel (that 2nd class) code for this example would be:</p>
  
  <pre><code>package jframetest;
  
  import java.awt.*;
  import javax.swing.JButton;
  import javax.swing.JLabel;
  import javax.swing.JPanel;
  import javax.swing.JSeparator;
  import net.miginfocom.swing.MigLayout;
  
  
  public class JPanelOne extends JPanel {
  
      private JPanel panelSettingsMain;
      private JLabel labelChooseLanguage, labelWordsCollection;
      private JButton buttonSelectLanguage, buttonSelectCollection,
              buttonStatistics, buttonPrintingOptions, buttonAddNewWordCollection,
              buttonInterfaceCustomization;
      private JSeparator separatorSettingsOne, separatorSettingsTwo,
              separatorSettingsThree, separatorSettingsFour,
              separatorSettingsFive;
      private Color greenRegular, separatorGreenLight, separatorGreenDark;
  
      public JPanelOne() {
  
          // creating settings main panel
  
          // setting up layout managers
          MigLayout layoutSettingsMain = new MigLayout(
                  "insets 3 0 0 0");
  
          // setting up colors
          greenRegular = new Color(30, 165, 145);
          separatorGreenLight = new Color(190, 240, 220);
          separatorGreenDark = new Color(130, 205, 180);
  
          panelSettingsMain = new JPanel(layoutSettingsMain);
          panelSettingsMain.setBackground(Color.WHITE);
  
              // setting up choose language label
              labelChooseLanguage = new JLabel("Choose language:");
              panelSettingsMain.add(labelChooseLanguage,
                      "gapleft 10, gaptop 15, width 200");
  
              // setting up select language button
              buttonSelectLanguage = new JButton("language");
              buttonSelectLanguage.setForeground(greenRegular);
              buttonSelectLanguage.setFocusPainted(false);
              buttonSelectLanguage.setBorder(null);
              buttonSelectLanguage.setContentAreaFilled(false);
              buttonSelectLanguage.setCursor(new java.awt.Cursor(
                      java.awt.Cursor.HAND_CURSOR));
              panelSettingsMain.add(buttonSelectLanguage, "gapbottom 15px, wrap");
  
              // setting up light separator
              separatorSettingsOne = new JSeparator();
              separatorSettingsOne.setForeground(separatorGreenLight);
              panelSettingsMain.add(separatorSettingsOne,
                      "span 2, width 320, gapbottom 15, wrap");
  
              // setting up words collection label
              labelWordsCollection = new JLabel("Words collection:");
              panelSettingsMain.add(labelWordsCollection, "gapleft 10");
  
              // setting up selectcollection button
              buttonSelectCollection = new JButton("collection");
              buttonSelectCollection.setForeground(greenRegular);
              buttonSelectCollection.setFocusPainted(false);
              buttonSelectCollection.setBorder(null);
              buttonSelectCollection.setContentAreaFilled(false);
              buttonSelectCollection.setCursor(new java.awt.Cursor(
                      java.awt.Cursor.HAND_CURSOR));
              panelSettingsMain.add(buttonSelectCollection,
                      "gapbottom 15px, wrap");
  
              // setting up dark separator
              separatorSettingsTwo = new JSeparator();
              separatorSettingsTwo.setForeground(separatorGreenDark);
              panelSettingsMain.add(separatorSettingsTwo,
                      "span 2, width 320, gapbottom 15px, wrap");
  
              // setting up show statistics button
              buttonStatistics = new JButton("Show statistics");
              buttonStatistics.setForeground(greenRegular);
              buttonStatistics.setFocusPainted(false);
              buttonStatistics.setBorder(null);
              buttonStatistics.setContentAreaFilled(false);
              buttonStatistics.setCursor(new java.awt.Cursor(
                      java.awt.Cursor.HAND_CURSOR));
              panelSettingsMain.add(buttonStatistics,
                      "gapleft 10, gapbottom 15px, , wrap");
  
              // setting up dark separator
              separatorSettingsThree = new JSeparator();
              separatorSettingsThree.setForeground(separatorGreenDark);
              panelSettingsMain.add(separatorSettingsThree,
                      "span 2, width 320, gapbottom 15px, wrap");
  
              // setting up printing options button
              buttonPrintingOptions = new JButton("Printing options");
              buttonPrintingOptions.setForeground(greenRegular);
              buttonPrintingOptions.setFocusPainted(false);
              buttonPrintingOptions.setBorder(null);
              buttonPrintingOptions.setContentAreaFilled(false);
              buttonPrintingOptions.setCursor(new java.awt.Cursor(
                      java.awt.Cursor.HAND_CURSOR));
              panelSettingsMain.add(buttonPrintingOptions,
                      "gapleft 10, gapbottom 15px, wrap");
  
              // setting up dark separator
              separatorSettingsFour = new JSeparator();
              separatorSettingsFour.setForeground(separatorGreenDark);
              panelSettingsMain.add(separatorSettingsFour,
                      "span 2, width 320, gapbottom 15px, wrap");
  
              // setting up add new word collection button
              buttonAddNewWordCollection = new JButton("Add new word collection");
              buttonAddNewWordCollection.setForeground(greenRegular);
              buttonAddNewWordCollection.setFocusPainted(false);
              buttonAddNewWordCollection.setBorder(null);
              buttonAddNewWordCollection.setContentAreaFilled(false);
              buttonAddNewWordCollection.setCursor(new java.awt.Cursor(
                      java.awt.Cursor.HAND_CURSOR));
              panelSettingsMain.add(buttonAddNewWordCollection,
                      "gapleft 10, gapbottom 15px, , wrap");
  
              // setting up dark separator
              separatorSettingsFive = new JSeparator();
              separatorSettingsFive.setForeground(separatorGreenDark);
              panelSettingsMain.add(separatorSettingsFive,
                      "span 2, width 320, gapbottom 10px, wrap");
  
              // setting up interface customization button
              buttonInterfaceCustomization = new JButton(
                      "Interface customization");
              buttonInterfaceCustomization.setForeground(greenRegular);
              buttonInterfaceCustomization.setFocusPainted(false);
              buttonInterfaceCustomization.setBorder(null);
              buttonInterfaceCustomization.setContentAreaFilled(false);
              buttonInterfaceCustomization.setCursor(new java.awt.Cursor(
                      java.awt.Cursor.HAND_CURSOR));
              panelSettingsMain.add(buttonInterfaceCustomization,
                      "gapleft 10, gapbottom 15px, wrap");
  
      }
  
  }
  </code></pre>
  
  <p>I was thinking about navigating through the program GUI by setting JPanels (ones like in the example) to visible or not visible.</p>
  
  <ol>
  <li>Is it good way to do it?</li>
  <li>Should I split my GUI into few classes, or I should keep everything in one? I am asking, because now with only half of the GUI in the code its about 400 lines long (and it cant do anything than just "look" at this point). As I had said before - I am beginner and its one of the longest application I have written so far (which I am sure it is not that long anyway!).</li>
  </ol>
  
  <p><strong>EDIT</strong></p>
  
  <p>Maybe I am overthinking it, so in the end is it ok to have big GUI classes and to control visibility of different GUI areas by setting them visible or not?</p>
  
  <p><strong>EDIT</strong></p>
  
  <p>I've looked into the CardLayout tutorial at Oracle and it looks like it is good for my task (excluding the creating JPanels from the external classes, but it is ok). I misunderstood it at first and was thinking about CardLayout only in terms of tabbed pane (which I didn't want to implement in my project).</p>