Java中JPanel的JPanel

时间:2015-01-01 23:13:55

标签: java swing jpanel

我正在尝试用Java开发一个Jpanel的JPanels 外部JPanel具有Layout FlowLayout.LEFT,内部JPanel具有Layout 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);

    }

然后我将标签添加到名为container

的外部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();

这里的输出似乎是流量布局前导不起作用

我该怎么办?如何将标签添加为行和列?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我发现可以使用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();