Java 中的 JPanel 中的 JPanel

JPanel of JPanels in Java

我正在尝试在 Java 中开发 JPanel 的 JPanel 外部 JPanel 具有布局 FlowLayout.LEFT,内部 JPanel 具有布局 FlowLayout.LEADING 我在内部 jpanels 添加了一个标签 应该作为标签的列和行添加到外部面板 但这不起作用将标签作为一行添加到外部面板我的意思是所有

的左 FowLayout

我将标签存储在名为 board 的标签链表的链表中 这是填充标签链表的代码

for(int i =0 ; i <7 ;i++)
    {
        LinkedList<JLabel> list =new LinkedList<JLabel>();


        for(int j=0 ; j< 5; j++)
        {
            JLabel lab = new JLabel();
            lab.setIcon(add_icon);
            lab.addMouseListener(listener);
            lab.setTransferHandler(new TransferHandler("icon"));    
            list.add(lab);
        }
        board.add(list);

    }

然后我将标签添加到名为容器的外部 jpanel

这是代码

container.setLayout(new FlowLayout(FlowLayout.LEFT));

    for(int i =0 ; i < board.size() ;i++)
    {
        panel =new JPanel();
        panel.setLayout(new FlowLayout(FlowLayout.LEADING));
        for(int j=0 ; j< board.get(i).size();  j++)
        {
            panel.add(board.get(i).get(j));

        }

        container.add(panel);


        //          
    }
    add(container);

    validate();
    repaint();

这是输出,似乎流式布局前导不起作用

我该怎么做?我应该怎么做才能将标签添加为行和列?

FlowLayout 无法垂直堆叠组件。请改用 BoxLayout。试试下面的代码:

container.setLayout(new FlowLayout(FlowLayout.LEFT));
for(int i = 0; i < board.size(); i++){
    panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
    for(int j = 0; j < board.get(i).size(); j++)
        panel.add(board.get(i).get(j));
    container.add(panel);
}
add(container);
validate();
repaint();

我发现可以使用 GridBagLayout

    container.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    c.fill=GridBagConstraints.HORIZONTAL;
    for(int i =0 ; i < board.size() ;i++)
    {
        panel =new JPanel();
        panel.setLayout(new GridBagLayout());
        GridBagConstraints c1 = new GridBagConstraints();
        c1.fill=GridBagConstraints.VERTICAL;
        c1.weighty=-.9;

        //          panel.setBounds(0, 0, 400, 300);
        for(int j=0 ; j< board.get(i).size();  j++)
        {               
            c1.gridx = j;
            c1.gridy = 0;
            c1.insets= new Insets(-5,0,0,-5);
            panel.add(board.get(i).get(j),c1);

        }   
        c.weightx =- 5;
        c.gridx = 0;
        c.gridy =i ;
        c.insets=new Insets(-5,0,-5,0);


        container.add(panel,c);


        //          
    }
    add(container);

    validate();
    repaint();