繁体   English   中英

Java中的JPanels的JPanel

[英]JPanel of JPanels in Java

我正在尝试用Java开发JPanels的Jpanel,外部JPanel具有Layout FlowLayout.LEFT,内部JPanels具有Layout FlowLayout.LEADING我向内部jpanels添加了标签,应将其作为列和行的标签添加到外部面板但这不起作用将标签作为一行添加到外部面板上,我的意思是所有的左FowLayout

我将标签存储在称为板的标签的链表的链表中,这是填充标签链表的代码

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM