Comment obtenir le GridBagLayout à respecter la taille minimale d'un bouton ou d'un panneau?

Dans la suite de GridBagLayout code, j'attends au minimum spécifié la taille de JButton btn2 être respectés lors de la JFrame est redimensionnée pour être de plus en plus petits. Mais quand je fais la JFrame plus petit, le btn2 devient plus petit que sa taille minimale, puis disparaît.

Quelqu'un peut me pointer dans la bonne direction de ce que je fais mal? J'ai peut-être de définir la taille minimale de la Composite qui contient les boutons?

Toute aide est appréciée, merci!

    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);
pas la résolution de votre problème, mais ne pouvait pas être répété assez souvent: ne pas utiliser setXXSize, jamais - stackoverflow.com/a/7229519/203657

OriginalL'auteur Robert Hume | 2012-08-21