我正在用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();
}
}
1条答案
按热度按时间huus2vyu1#
您需要使用复合布局(多个LayoutManager)。因此,使用BorderLayout并添加一个JPanel作为北,并添加vendeurs_center作为中心。然后在北面板内使用E。g. GridLayout并放置两个组件general_north和client_north。
作为替代使用GridBagLayout -这是一个布局,将实现一切一气呵成:
在配置了GridBagLayout的一个组件中添加所有三个组件,如下所示:
好处是,在这里你有很多额外的选择来玩。在我看来,最重要的是定义当窗口调整大小时组件应该如何增长/收缩的能力。