title: How to automatically increase or decease size of JButton text based on the size of JButton?
body: <p>I am trying to increase/decrease the font size of JButton text automatically (if JButton increases/stretches its text will also increase, if JButton decreases its text will also decrease). The default font of the JButtons will be Sans-Serif size 20 and it can never decrease below 20 (it can be 21, 30, 40 or anything above or equal to 20 but never anything below 20). I have a JPanel, called MenuJPanel, it uses the GridLayout to add 5 JButtons which will increase/decrease in size as the JPanel increases/deceases. I chose the GridLayout as it seems to be the best layout for this purpose, am I wrong? I also added a componentResized to the MenuJPanel. Below you can see my code which partially works.</p>
  
  <p><img src="https://i.stack.imgur.com/v2M3H.png" alt="enter image description here"></p>
  
  <pre><code>public class MenuJPanel extends JPanel {
  
      private JButton resizeBtn1;
      private JButton resizeBtn2;
      private JButton resizeBtn3;
      private JButton resizeBtn4;
      private JButton resizeBtn5;
  
      public MenuJPanel() {
          initComponents();
        this.addComponentListener(new ComponentAdapter() {
              @Override
              public void componentResized(ComponentEvent e) {
  
                  Font btnFont = resizeBtn1.getFont();
                  String btnText = resizeBtn1.getText();
  
                  int stringWidth = resizeBtn1.getFontMetrics(btnFont).stringWidth(btnText);
                  int componentWidth = resizeBtn1.getWidth();
  
                  // Find out how much the font can grow in width.
                  double widthRatio = (double) componentWidth / (double) stringWidth;
  
                  int newFontSize = (int) (btnFont.getSize() * widthRatio);
                  int componentHeight = resizeBtn1.getHeight();
  
                  // Pick a new font size so it will not be larger than the height of label.
                  int fontSizeToUse = Math.min(newFontSize, componentHeight);
  
                  // Set the label's font size to the newly determined size.
                  resizeBtn1.setFont(new Font(btnFont.getName(), Font.BOLD, fontSizeToUse));
              }
          });
      }
  
      private void initComponents() {
  
          resizeBtn1 = new javax.swing.JButton();
          resizeBtn2 = new javax.swing.JButton();
          resizeBtn3 = new javax.swing.JButton();
          resizeBtn4 = new javax.swing.JButton();
          resizeBtn5 = new javax.swing.JButton();
  
          setLayout(new java.awt.GridLayout(5, 0));
  
          resizeBtn1.setText("Text to resize 1");
          add(resizeBtn1);
  
          resizeBtn2.setText("Text to resize 2");
          add(resizeBtn2);
  
          resizeBtn3.setText("Text to resize 3");
          add(resizeBtn3);
  
          resizeBtn4.setText("Text to resize 4");
          add(resizeBtn4);
  
          resizeBtn5.setText("Text to resize 5");
          add(resizeBtn5);
      }
  }
  </code></pre>