title: JButtons inside JPanels, fill up the whole panel
body: <p>I've been struggling to set a specific size to a button inserted into a JPanel with a GridLayout.</p>
  
  <p>The button always fills up the whole panel, whereas if I remove the gridlayout, the button won't have the same behavior.</p>
  
  <p>any hints?</p>
  
  <pre><code>package panels;
  
  import java.awt.BorderLayout;
  import java.awt.Color;
  import java.awt.Dimension;
  import java.awt.Font;
  import java.awt.GridLayout;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  
  import javax.swing.JButton;
  import javax.swing.JFrame;
  import javax.swing.JLabel;
  import javax.swing.JOptionPane;
  import javax.swing.JPanel;
  import javax.swing.JTextField;
  
  
  public class ColorDisplay {
  
  private final int X = 100; 
  private final int Y = 100;
  private final Dimension PANEL_SIZE = new Dimension(500,500);
  private JTextField textRed;
  private JTextField textGreen;
  private JTextField textBlue;
  private JLabel labelText, labelRed, labelGreen, labelBlue;
  private JPanel displayPanel;
  private JPanel textPanel;
  private JPanel buttonPanel;
  private JButton button;
  private final Font font = new Font("Arial", Font.PLAIN, 22);
  
  public static void main(String[] args) {
      // TODO Auto-generated method stub
  
      new ColorDisplay();
  
  
  }
  public ColorDisplay(){
      JFrame mainFrame = new JFrame();
  
      // make sure the program exits when the frame close
      mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      mainFrame.setTitle("Color Display");
      mainFrame.setLocation(X,Y);
      mainFrame.setPreferredSize(PANEL_SIZE);
  
      // ensure an elastic layout
      mainFrame.setLayout(new GridLayout(3, 1));
  
      mainFrame.setLocationByPlatform(true);
  
      mainFrame.add(getColorPanel());
      mainFrame.add(getTextPanel());
      mainFrame.add(getButtonPanel());
  
      mainFrame.pack();
      mainFrame.setVisible(true);
  
  }
  
  public JPanel getColorPanel(){
      displayPanel = new JPanel(new BorderLayout());
      labelText = new JLabel("Color Display", JLabel.CENTER);
      Font fontColorDisplay = new Font("Arial", Font.PLAIN, 42);
      labelText.setFont(fontColorDisplay);
  
      displayPanel.add(labelText);
  
      return displayPanel;
  }
  
  public JPanel getTextPanel(){
      textPanel = new JPanel(new GridLayout(2,3));
      labelRed = new JLabel("Red", JLabel.CENTER);
      labelGreen = new JLabel("Green", JLabel.CENTER);
      labelBlue = new JLabel("Blue", JLabel.CENTER);
      textRed = new JTextField();
      textGreen = new JTextField();
      textBlue = new JTextField();
  
      labelRed.setFont(font);
      labelGreen.setFont(font);
      labelBlue.setFont(font);
      textRed.setFont(font);
      textGreen.setFont(font);
      textBlue.setFont(font);
  
      textPanel.add(labelRed);
      textPanel.add(labelGreen);
      textPanel.add(labelBlue);
      textPanel.add(textRed);
      textPanel.add(textGreen);
      textPanel.add(textBlue);
  
      return textPanel;
  }
  
  public JPanel getButtonPanel(){
  
      buttonPanel = new JPanel(new BorderLayout());
      button = new JButton("Display Color");
      button.addActionListener(new ButtonListener ()); // Add event handler
      button.setFont(font);
      button.setPreferredSize(new Dimension(100, 100));
  
      buttonPanel.add(button);
      return buttonPanel;
  
  }
  
  private int getColor(){
  
      String colorCode = textRed.getText() + textGreen.getText() + textBlue.getText();
      return Integer.parseInt(colorCode);
  }
  
  private boolean validateColor(String textValue){
      boolean isValid = false;
      try {
          int num1 = Integer.parseInt(textValue);
          if (num1 &gt;= 0 &amp;&amp; num1 &lt;= 255)
              isValid = true;
          else
          {
              isValid = false;
              JOptionPane.showConfirmDialog(null, "Please enter numbers between 0 and 255", "Error", JOptionPane.PLAIN_MESSAGE);
          }
      } catch (NumberFormatException e) {
          JOptionPane.showConfirmDialog(null, "Please enter numerical values", "Error", JOptionPane.PLAIN_MESSAGE);
      }
      return isValid;
  
  
  }
  private class ButtonListener implements ActionListener { // Inner class
      public void actionPerformed(ActionEvent event) {
  
          if (validateColor(textRed.getText()) &amp;&amp; validateColor(textGreen.getText()) &amp;&amp; validateColor(textBlue.getText()))
          {
              Color bgColor = new Color(getColor());
              displayPanel.setBackground(bgColor);    
          }
  
  
      }
  }
  }
  </code></pre>