Java Swing中BorderLayout的问题

fnvucqvd  于 2023-04-28  发布在  Java
关注(0)|答案(1)|浏览(131)

我正在用Java为一个项目做一个小程序,但是我在布局上有一些问题。我创建了3个面板,我希望它们是这样的:

我试着用BorderLayout,设置2个面板在北部,1个在中心,但它不起作用,我试着让他们在东部和南部的最后一个,但没有工作。
现在我尝试了FlowLayout,它不适用于其他2个面板,我有这个:

我把我的视图包的代码这个接口(我们使用MVC),如果有人能帮助我,我会很感激。谢谢你们!

package View;

import Model.Client;
import Model.Magasin;

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

public class Statistiques extends JFrame {

    JLabel article = new JLabel("Nombre article vendu:");
    JLabel chifre_affair = new JLabel("Chifre d'Affair:");
    JLabel art_plus_vendu = new JLabel("Article plus vendus:");
    JLabel nbTArticle = new JLabel("2");
    JLabel nbChiffreAffair = new JLabel("3");
    JLabel nomArticlePlusVendus = new JLabel("iPhone12");

    Magasin magasin;
    Vector<Client> listeClients = new Vector<Client>();

    JComboBox clients = new JComboBox<>(listeClients);
    JLabel espace = new JLabel();
    JLabel art_plus_achete = new JLabel("Article plus achete:");
    JLabel nomArticlePlusAchete = new JLabel();
    JLabel list_label = new JLabel("liste articles achete: ");


    JComboBox vendeurs = new JComboBox<>();
    JLabel art= new JLabel("Article plus achete:");
    JLabel nom = new JLabel();
    JLabel listv_label = new JLabel("liste articles achete: ");

    JPanel general_north = new JPanel();
    JPanel client_north = new JPanel();
    JPanel vendeurs_center = new JPanel();

    public Statistiques(Magasin m){
        this.setTitle("STATISTIQUES");
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        this.setPreferredSize(new Dimension(800,800));
        this.setLayout(new BorderLayout());
        magasin = m;
        listeClients = magasin.listeClient;

        general_north.setLayout(new GridLayout(3,2,1,1));
        general_north.setSize(400,200);
        //general_north.setBorder(BorderFactory.createEmptyBorder(100,200,100,200));

        client_north.setLayout(new GridLayout(4,1,1,1));
        client_north.setPreferredSize(new Dimension(400,200));
        //client_north.setBorder(BorderFactory.createEmptyBorder(100,200,100,200));

        client_north.add(art_plus_achete);
        client_north.add(nomArticlePlusAchete);

        vendeurs_center.setLayout(new FlowLayout());
        vendeurs_center.setPreferredSize(new Dimension(800,400));

        getContentPane().add(general_north);
        getContentPane().add(client_north);
        getContentPane().add(vendeurs_center);

        general_north.add(article);
        general_north.add(nbTArticle);
        general_north.add(chifre_affair);
        general_north.add(nbChiffreAffair);
        general_north.add(art_plus_vendu);
        general_north.add(nomArticlePlusVendus);

        this.pack();
    }
}
huus2vyu

huus2vyu1#

您需要使用复合布局(多个LayoutManager)。因此,使用BorderLayout并添加一个JPanel作为北,并添加vendeurs_center作为中心。然后在北面板内使用E。g. GridLayout并放置两个组件general_north和client_north。
作为替代使用GridBagLayout -这是一个布局,将实现一切一气呵成:
在配置了GridBagLayout的一个组件中添加所有三个组件,如下所示:

general_north: Position 1,1
client_north: Position 2,1
vendeurs_center: Position 1,2; spanX: 2

好处是,在这里你有很多额外的选择来玩。在我看来,最重要的是定义当窗口调整大小时组件应该如何增长/收缩的能力。

相关问题