Как заставить GridBagLayout соблюдать минимальный размер кнопки или панели?

В следующем коде GridBagLayout я ожидаю, что указанный минимальный размер JButton btn2 будет соблюден, когда размер JFrame будет уменьшен. Но когда я делаю JFrame меньше, btn2 становится меньше своего минимального размера и затем исчезает.

Может ли кто-нибудь указать мне правильное направление того, что я делаю неправильно? Может быть, я должен установить минимальный размер JPanel, который содержит кнопки?

Любая помощь приветствуется, спасибо!

    JFrame frame = new JFrame();
    frame.setSize(400,300);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel panel = new JPanel();
    panel.setMinimumSize(new Dimension(400,300));
    panel.setBackground(Color.RED);

    panel.setLayout(new GridBagLayout());
    GridBagConstraints gbc = null;

    JButton btn1 = new JButton("btn1");
    btn1.setPreferredSize(new Dimension(150,50));
    btn1.setMinimumSize(new Dimension(150,50));
    gbc = new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, 
            GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
            new Insets(0,0,0,0), 0, 0);
    panel.add(btn1, gbc);

    JButton btn2 = new JButton("btn2");
    btn2.setPreferredSize(new Dimension(150,150));
    btn2.setMinimumSize(new Dimension(150,150));
    gbc = new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0, 
            GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH,
            new Insets(0,0,100,100), 0, 0);
    panel.add(btn2, gbc);

    frame.getContentPane().add(panel);
    frame.setVisible(true);

Ответы на вопрос(2)

Ваш ответ на вопрос