BorderLayout 问题中的 GridBagLayout:BorderLayout.CENTER 中没有显示

GridBagLayout in a BorderLayout problem : no display in BorderLayout.CENTER

我试图在 BorderLayout 的中心添加一个 GridBagLayout,但是当我将它添加到中心时,它没有出现。 尽管如此,如果我将它放在 BorderLayout 中的另一个位置,它会正确显示。 我试图在 BorderLayout 的中心放置另一个组件,但没有出现。

我想创建多个面板以在我的 JFrame 中显示它们。 我在使用 JFrame 中的实例属性构建这些面板时尝试添加这些面板。

这是我想要得到的例子

import java.awt.*;
import javax.swing.*;

public class Fenetre
{

  private JPanel contentPane;
  private PanelAccueil panelAccueil;

  public void fenetreGraphique()
  {
      //Définit une nouvelle fenêtre pour le GUI
      JFrame fenetre = new JFrame("AideMJ DD5");
      fenetre.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      fenetre.setExtendedState(JFrame.MAXIMIZED_BOTH);
      fenetre.setLocationRelativeTo(null);

      //Définit les panels qui vont pouvoir s'afficher dans la fenêtre
      contentPane = new JPanel();

      //Ajout des différents panels créés
      panelAccueil = new PanelAccueil(contentPane);
      contentPane.add(panelAccueil);

      //Affichage de la fenêtre
      fenetre.setContentPane(contentPane);
      fenetre.pack();
      fenetre.setVisible(true);
  }

  public static void main(String[] args)
  {
    SwingUtilities.invokeLater(new Runnable()
    {
        public void run()
        {
            new Fenetre().fenetreGraphique();
        }
    });
  }
}

class PanelAccueil extends JPanel
{
    private JPanel panelAccueil;
    private JLabel messageAccueil;
    private JLabel signature;
    private JButton nouveauMonstre;
    private JButton voirMonstre;

    public PanelAccueil(JPanel panel){

        panelAccueil = panel;
        panelAccueil.setBackground(new Color(51,51,51));
        panelAccueil.setLayout( new BorderLayout() );

        //Premier panel pour le bandeau en haut
        messageAccueil = new JLabel("Bienvenue sur AideMJ pour Donjons & Dragons 5\u00e8me \u00e9dition", SwingConstants.CENTER);
        messageAccueil.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        messageAccueil.setForeground( new Color(255,255,255) );
        messageAccueil.setFont(new Font("Tahoma", Font.PLAIN, 36));

        //Ajout des boutons du menu
        JPanel boutons = new JPanel();
        boutons.setBackground( new Color(51,51,51) );
        boutons.setLayout(new GridBagLayout());

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.weightx = 1.0;
        gbc.weighty = 1.0;
        gbc.anchor = GridBagConstraints.CENTER;

        nouveauMonstre = new JButton("Nouveau monstre");
        nouveauMonstre.setPreferredSize( new Dimension(300, 60) );
        boutons.add(nouveauMonstre, gbc);

        gbc.gridy = 1;
        voirMonstre = new JButton("Voir monstre");
        voirMonstre.setPreferredSize( new Dimension(300, 60) );
        boutons.add(voirMonstre, gbc);


        //Dernier panel pour la signature en bas à droite
        signature = new JLabel("D\u00e9velopp\u00e9 par Ebenial", SwingConstants.RIGHT);
        signature.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        signature.setForeground( new Color(255,255,255) );
        signature.setFont(new Font("Tahoma", Font.PLAIN, 15));

        panelAccueil.add(messageAccueil, BorderLayout.NORTH);
        panelAccueil.add(boutons, BorderLayout.CENTER);
        panelAccueil.add(signature, BorderLayout.SOUTH);
  }
}

代码中存在一些错误,但主要归结为对内容窗格(代码将其添加到另一个面板)的混淆。

此代码有许多更改,请仔细检查:

import java.awt.*;
import javax.swing.*;

public class Fenetre {

    private PanelAccueil panelAccueil;

    public void fenetreGraphique() {
        //Définit une nouvelle fenêtre pour le GUI
        JFrame fenetre = new JFrame("AideMJ DD5");
        fenetre.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        fenetre.setExtendedState(JFrame.MAXIMIZED_BOTH);
        fenetre.setLocationRelativeTo(null);

        //Définit les panels qui vont pouvoir s'afficher dans la fenêtre
        JPanel contentPane = new JPanel();

        //Ajout des différents panels créés
        panelAccueil = new PanelAccueil(contentPane);
        //contentPane.add(panelAccueil.panelAccueil);

        //Affichage de la fenêtre
        fenetre.setContentPane(panelAccueil.panelAccueil);
        fenetre.pack();
        fenetre.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Fenetre()::fenetreGraphique);
    }
}

class PanelAccueil {

    JPanel panelAccueil;

    public PanelAccueil(JPanel panel) {
        panelAccueil = panel;
        panelAccueil.setBackground(new Color(51, 51, 51));
        panelAccueil.setLayout(new BorderLayout());

        //Premier panel pour le bandeau en haut
        JLabel messageAccueil = new JLabel("Bienvenue sur AideMJ pour Donjons & Dragons 5\u00e8me \u00e9dition", SwingConstants.CENTER);
        messageAccueil.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        messageAccueil.setForeground(new Color(255, 255, 255));
        messageAccueil.setFont(new Font("Tahoma", Font.PLAIN, 36));

        //Ajout des boutons du menu
        JPanel boutons = new JPanel();
        boutons.setBackground(Color.red);
        boutons.setBackground(new Color(51, 51, 51));
        boutons.setLayout(new GridBagLayout());

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.weightx = 1.0;
        gbc.weighty = 1.0;
        gbc.anchor = GridBagConstraints.CENTER;
        gbc.insets = new Insets(20,20,20,20);

        Insets buttonInsets = new Insets(10,100,10,100);
        for (int ii=0; ii<6; ii++) {
            JButton b = new JButton("Button " + (ii+1));
            b.setFont(b.getFont().deriveFont(30f));
            b.setMargin(buttonInsets);
            gbc.gridy = ii;
            boutons.add(b, gbc);
        }

        //Dernier panel pour la signature en bas à droite
        JLabel signature = new JLabel("D\u00e9velopp\u00e9 par Ebenial", SwingConstants.RIGHT);
        signature.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        signature.setForeground(new Color(255, 255, 255));
        signature.setFont(new Font("Tahoma", Font.PLAIN, 15));

        panelAccueil.add(messageAccueil, BorderLayout.NORTH);
        panelAccueil.add(boutons, BorderLayout.CENTER);
        panelAccueil.add(signature, BorderLayout.SOUTH);
    }
}