gpt4 book ai didi

java - BorderLayout 中的 GridBagLayout 问题 : no display in BorderLayout. CENTER

转载 作者:行者123 更新时间:2023-12-04 10:23:17 26 4
gpt4 key购买 nike

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

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

这是我想要得到的一个例子
enter image description here

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);
}
}

最佳答案

代码中有许多错误,但主要归结为对内容 Pane (代码添加到另一个面板)的混淆。

enter image description here

对此代码进行了许多更改,请仔细检查:

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);
}
}

关于java - BorderLayout 中的 GridBagLayout 问题 : no display in BorderLayout. CENTER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60736077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com