GridLayout/BorderLayout Not Working

3.3k views Asked by At

I need to make a program that ends up looking like this:

My code so far is what's posted and I can't seem to wrap my head around how to make this look exactly like the image I provided. I just don't really know what else I can do, I've tried looking around for solutions, but I can't manage to combine that information with this to make it all work together.

So, I hope somebody else can help me here, it'd be greatly appreciated! :D

import java.awt.*;     // Needed for BorderLayout class  
import javax.swing.*;  // Needed for Swing classes  

/** 
   This class demonstrates how JPanels can be nested 
   inside each region of a content pane governed by 
   a BorderLayout manager. 
*/  

public class BorderPanelWindow extends JFrame  
{  
   /** 
      Constructor 
   */  

   public BorderPanelWindow()  
   {  
      // Set the title bar text.  
      setTitle("Border Layout");  

      // Specify an action for the close button.  
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

      // Add a BorderLayout manager to the content pane.  
      setLayout(new BorderLayout());  

      // Create five panels.  
      JPanel panel1 = new JPanel();  
      JPanel panel2 = new JPanel();  
      JPanel panel3 = new JPanel();  
      JPanel panel4 = new JPanel();  
      panel4.setLayout(new GridLayout(3,3));  
      JPanel panel5 = new JPanel();  
      panel5.setLayout(new GridLayout(3,3));  
      JPanel panel6 = new JPanel();  
      JPanel panel7 = new JPanel();  
      JPanel panel8 = new JPanel();  
      JPanel panel9 = new JPanel();  
      JPanel panel10 = new JPanel();  


      // Create five buttons.  
      JButton button1 = new JButton("Button 1");  
      JButton button2 = new JButton("Button 2");  
      JButton button3 = new JButton("Button 3");  
      JButton button4 = new JButton("Button 4");  
      JButton button5 = new JButton("Button 5");  
      JButton button6 = new JButton("Button 6");  
      JButton button7 = new JButton("Button 7");  
      JButton button8 = new JButton("Button 8");  
      JButton button9 = new JButton("Button 9");  
      JButton button10 = new JButton("Button 10");  

      //Add buttons to panel4  
      panel4.add(button1);  
      panel4.add(button2);  
      panel4.add(button3);  
      panel4.add(button4);  
      panel4.add(button5);  
      panel4.add(button6);  


      // Add the buttons to the panels.  
      panel7.add(button7);  
      panel8.add(button8);  
      panel9.add(button9);  
      panel10.add(button10);  

      // Add the five panels to the content pane.  
      add(panel7, BorderLayout.NORTH);  
      add(panel8, BorderLayout.SOUTH);  
      add(panel9, BorderLayout.EAST);  
      add(panel4, BorderLayout.WEST);  
      //add(panel10, BorderLayout.WEST);  
      add(panel5, BorderLayout.CENTER);  

      // Pack and display the window.  
      pack();  
      setVisible(true);  
   }  

   /** 
      The main method creates an instance of the 
      BorderPanelWindow class, causing it to display 
      its window. 
   */  

   public static void main(String[] args)  
   {  
      new BorderPanelWindow();  
   }  
} 

Update

So this is what I have so far in what I think an answer suggested me to do. Like I said I can't see my panel4 when I have button 10 on there as well, I'm sure it's something I'm just not seeing but still.

import java.awt.*;     // Needed for BorderLayout class
import javax.swing.*;  // Needed for Swing classes

/**
   This class demonstrates how JPanels can be nested
   inside each region of a content pane governed by
   a BorderLayout manager.
*/

public class BorderPanelWindow extends JFrame
{
   /**
      Constructor
   */

   public BorderPanelWindow()
   {
      // Set the title bar text.
      setTitle("Border Layout");

      // Specify an action for the close button.
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      // Add a BorderLayout manager to the content pane.
      setLayout(new BorderLayout());

      // Create five panels.
      JPanel panel1 = new JPanel();
      JPanel panel2 = new JPanel();
      JPanel panel3 = new JPanel();
      JPanel panel4 = new JPanel();
      panel4.setLayout(new GridLayout(3,3));
      JPanel panel5 = new JPanel();
      panel5.setLayout(new GridLayout(3,3));
      JPanel panel6 = new JPanel();
      JPanel panel7 = new JPanel();
      JPanel panel8 = new JPanel();
      JPanel panel9 = new JPanel();
      JPanel panel10 = new JPanel();


      // Create five buttons.
      JButton button1 = new JButton("Button 1");
      JButton button2 = new JButton("Button 2");
      JButton button3 = new JButton("Button 3");
      JButton button4 = new JButton("Button 4");
      JButton button5 = new JButton("Button 5");
      JButton button6 = new JButton("Button 6");
      JButton button7 = new JButton("Button 7");
      JButton button8 = new JButton("Button 8");
      JButton button9 = new JButton("Button 9");
      JButton button10 = new JButton("Button 10");
      JButton button11 = new JButton("Button 11");
      JButton button12 = new JButton("Button 12");
      JButton button13 = new JButton("Button 13");
      JButton button14 = new JButton("Button 14");
      JButton button15 = new JButton("Button 15");
      JButton button16 = new JButton("Button 16");
      JButton button17 = new JButton("Button 17");
      JButton button18 = new JButton("Button 18");

      //Add buttons to panel4
      panel4.add(button1);
      panel4.add(button2);
      panel4.add(button3);
      panel4.add(button4);
      panel4.add(button5);
      panel4.add(button6);

      //Add buttons to panel5
      panel5.add(button11);
      panel5.add(button12);
      panel5.add(button13);
      panel5.add(button14);
      panel5.add(button15);
      panel5.add(button16);
      panel5.add(button17);
      panel5.add(button18);


      // Add the buttons to the panels.
      panel7.add(button7);
      panel8.add(button8);
      panel9.add(button9);
      panel10.add(button10);

      // Add the five panels to the content pane.
      add(panel7, BorderLayout.NORTH);
      add(panel8, BorderLayout.SOUTH);
      add(panel9, BorderLayout.EAST);
      add(panel4, BorderLayout.WEST);
      add(panel10, BorderLayout.WEST);
      add(panel5, BorderLayout.CENTER);

      // Pack and display the window.
      pack();
      setVisible(true);
   }

   /**
      The main method creates an instance of the
      BorderPanelWindow class, causing it to display
      its window.
   */

   public static void main(String[] args)
   {
      new BorderPanelWindow();
   }
}

Update2

So now I polished it up a little bit and tried to do what you said but now it looks even worse so there's gotta be something I'm just not getting entirely lol. Hopefully you can see my mistake.

import java.awt.*;     // Needed for BorderLayout class
import javax.swing.*;  // Needed for Swing classes

/**
   This class demonstrates how JPanels can be nested
   inside each region of a content pane governed by
   a BorderLayout manager.
*/

public class BorderPanelWindow extends JFrame
{
   /**
      Constructor
   */

   public BorderPanelWindow()
   {
      // Set the title bar text.
      setTitle("Border Layout");

      // Specify an action for the close button.
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      // Add a BorderLayout manager to the content pane.
      setLayout(new BorderLayout());

      // Create five panels.
      JPanel panel1 = new JPanel();
      panel1.setLayout(new GridLayout(3,3));
      JPanel panel2 = new JPanel();
      panel2.setLayout(new GridLayout(3,3));
      JPanel panel3 = new JPanel();
      panel3.setLayout(new BorderLayout());
      JPanel panel4 = new JPanel();
      panel4.setLayout(new GridLayout(3,3));


      // Create five buttons.
      JButton button1 = new JButton("Button 1");
      JButton button2 = new JButton("Button 2");
      JButton button3 = new JButton("Button 3");
      JButton button4 = new JButton("Button 4");
      JButton button5 = new JButton("Button 5");
      JButton button6 = new JButton("Button 6");
      JButton button7 = new JButton("Button 7");
      JButton button8 = new JButton("Button 8");
      JButton button9 = new JButton("Button 9");
      JButton button10 = new JButton("Button 10");
      JButton button11 = new JButton("Button 11");
      JButton button12 = new JButton("Button 12");
      JButton button13 = new JButton("Button 13");
      JButton button14 = new JButton("Button 14");
      JButton button15 = new JButton("Button 15");
      JButton button16 = new JButton("Button 16");
      JButton button17 = new JButton("Button 17");
      JButton button18 = new JButton("Button 18");

      //Add buttons to panel1
      panel1.add(button1);
      panel1.add(button2);
      panel1.add(button3);
      panel1.add(button4);
      panel1.add(button5);
      panel1.add(button6);

      //Add buttons to panel2



      //Add the buttons to panel3
      panel3.add(button7);
      panel3.add(button8);
      panel3.add(button9);
      panel3.add(button10);

      //Add the buttons to panel4
      panel4.add(button11);
      panel4.add(button12);
      panel4.add(button13);
      panel4.add(button14);
      panel4.add(button15);
      panel4.add(button16);
      panel4.add(button17);
      panel4.add(button18);

      // Add the five panels to the content pane.
      add(panel1, BorderLayout.WEST);
      add(panel2, BorderLayout.EAST);
      add(panel3, BorderLayout.EAST);
      add(panel4, BorderLayout.CENTER);

      // Pack and display the window.
      pack();
      setVisible(true);
   }

   /**
      The main method creates an instance of the
      BorderPanelWindow class, causing it to display
      its window.
   */

   public static void main(String[] args)
   {
      new BorderPanelWindow();
   }
}

Update3

Okay, I'm a little further now the big issue is that buttons 11-18 aren't coming up in the middle of buttons 7-10.

import java.awt.*;     // Needed for BorderLayout class
import javax.swing.*;  // Needed for Swing classes

/**
   This class demonstrates how JPanels can be nested
   inside each region of a content pane governed by
   a BorderLayout manager.
*/

public class BorderPanelWindow extends JFrame
{
   /**
      Constructor
   */

   public BorderPanelWindow()
   {
      // Set the title bar text.
      setTitle("Border Layout");

      // Specify an action for the close button.
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      // Add a BorderLayout manager to the content pane.
      setLayout(new BorderLayout());

      // Create five panels.
      JPanel panel1 = new JPanel();
      panel1.setLayout(new GridLayout(2,3));
      JPanel panel2 = new JPanel();
      panel2.setLayout(new GridLayout(4,2));
      JPanel panel3 = new JPanel();
      panel3.setLayout(new BorderLayout());
      JPanel panel4 = new JPanel();
      panel4.setLayout(new GridLayout(1,2));


      // Create five buttons.
      JButton button1 = new JButton("Button 1");
      JButton button2 = new JButton("Button 2");
      JButton button3 = new JButton("Button 3");
      JButton button4 = new JButton("Button 4");
      JButton button5 = new JButton("Button 5");
      JButton button6 = new JButton("Button 6");
      JButton button7 = new JButton("Button 7");
      JButton button8 = new JButton("Button 8");
      JButton button9 = new JButton("Button 9");
      JButton button10 = new JButton("Button 10");
      JButton button11 = new JButton("Button 11");
      JButton button12 = new JButton("Button 12");
      JButton button13 = new JButton("Button 13");
      JButton button14 = new JButton("Button 14");
      JButton button15 = new JButton("Button 15");
      JButton button16 = new JButton("Button 16");
      JButton button17 = new JButton("Button 17");
      JButton button18 = new JButton("Button 18");

      //Add buttons to panel1
      panel1.add(button1);
      panel1.add(button2);
      panel1.add(button3);
      panel1.add(button4);
      panel1.add(button5);
      panel1.add(button6);

      //Add buttons to panel2



      //Add the buttons to panel3
      panel3.add(button7, BorderLayout.NORTH);
      panel3.add(button8, BorderLayout.SOUTH);
      panel3.add(button9, BorderLayout.EAST);
      panel3.add(button10, BorderLayout.WEST);

      //Add the buttons to panel4
      panel4.add(button11);
      panel4.add(button12);
      panel4.add(button13);
      panel4.add(button14);
      panel4.add(button15);
      panel4.add(button16);
      panel4.add(button17);
      panel4.add(button18);




      // Add the five panels to the content pane.
      add(panel1, BorderLayout.WEST);
      add(panel2, BorderLayout.CENTER);
      add(panel3, BorderLayout.EAST);
      add(panel4, BorderLayout.CENTER);



      // Pack and display the window.
      pack();
      setVisible(true);
   }

   /**
      The main method creates an instance of the
      BorderPanelWindow class, causing it to display
      its window.
   */

   public static void main(String[] args)
   {
      new BorderPanelWindow();
   }
}
1

There are 1 answers

3
Andrew Thompson On

I'd make that with 3 grid layouts and a border layout. E.G.

  • GridLayout for left/right sections (each section a panel)
    1. GridLayout for buttons 1-6
    2. BorderLayout for buttons 7-10 + panel in CENTER for..
      • GridLayout for buttons 11-18

Update

Your edit 3 was very close, note extra comments and changes in code to see this:

enter image description here

import java.awt.*;     // Needed for BorderLayout class
import javax.swing.*;  // Needed for Swing classes

/**
   This class demonstrates how JPanels can be nested
   inside each region of a content pane governed by
   a BorderLayout manager.
*/

public class BorderPanelWindow extends JFrame
{
   /**
      Constructor
   */

   public BorderPanelWindow()
   {
      // Set the title bar text.
      setTitle("Border Layout");

      // Specify an action for the close button.
      setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); // better

      // Add a BorderLayout manager to the content pane.
      setLayout(new BorderLayout());

      // Create five panels.
      JPanel panel1 = new JPanel();
      panel1.setLayout(new GridLayout(2,3));
      JPanel panel2 = new JPanel();
      panel2.setLayout(new GridLayout(4,2));
      JPanel panel3 = new JPanel();
      panel3.setLayout(new BorderLayout());
      JPanel panel4 = new JPanel();
      // we need as many rows as needed (0) in 2 columns (2)
      panel4.setLayout(new GridLayout(0,2)); 


      // Create five buttons.
      JButton button1 = new JButton("Button 1");
      JButton button2 = new JButton("Button 2");
      JButton button3 = new JButton("Button 3");
      JButton button4 = new JButton("Button 4");
      JButton button5 = new JButton("Button 5");
      JButton button6 = new JButton("Button 6");
      JButton button7 = new JButton("Button 7");
      JButton button8 = new JButton("Button 8");
      JButton button9 = new JButton("Button 9");
      JButton button10 = new JButton("Button 10");
      JButton button11 = new JButton("Button 11");
      JButton button12 = new JButton("Button 12");
      JButton button13 = new JButton("Button 13");
      JButton button14 = new JButton("Button 14");
      JButton button15 = new JButton("Button 15");
      JButton button16 = new JButton("Button 16");
      JButton button17 = new JButton("Button 17");
      JButton button18 = new JButton("Button 18");

      //Add buttons to panel1
      panel1.add(button1);
      panel1.add(button2);
      panel1.add(button3);
      panel1.add(button4);
      panel1.add(button5);
      panel1.add(button6);

      //Add buttons to panel2



      //Add the buttons to panel3
      panel3.add(button7, BorderLayout.PAGE_START);
      panel3.add(button8, BorderLayout.PAGE_END);
      panel3.add(button9, BorderLayout.LINE_END);
      panel3.add(button10, BorderLayout.LINE_START);

      //Add the buttons to panel4
      panel4.add(button11);
      panel4.add(button12);
      panel4.add(button13);
      panel4.add(button14);
      panel4.add(button15);
      panel4.add(button16);
      panel4.add(button17);
      panel4.add(button18);

      // Add panel4 to the CENTER of panel3
      panel3.add(panel4, BorderLayout.CENTER);


      // Add the five panels to the content pane.
      add(panel1, BorderLayout.LINE_START);
      add(panel2, BorderLayout.CENTER);
      add(panel3, BorderLayout.LINE_END);
      //add(panel4, BorderLayout.CENTER); // AND DON'T ADD IT HERE!

      // Pack and display the window.
      pack();
      setVisible(true);
   }

   /**
      The main method creates an instance of the
      BorderPanelWindow class, causing it to display
      its window.
   */

   public static void main(String[] args)
   {
      new BorderPanelWindow();
   }
}