Java Swing网格布局垂直约束问题

3

在Gridlayout中是否可以垂直添加组件?我的意思是上一个组件的上方添加下一个组件?

谢谢。


2
你应该接受更多的答案。你已经提出了55个问题,但只接受了不到一半的答案。 - Paul
3个回答

3

目前我所知并没有一种布局方式可以从底部向上垂直堆叠。如果你想要实现垂直堆叠,你可以使用单列的GridLayout或者纵轴为垂直方向的BoxLayout。通过嵌套面板和组合布局,你应该可以很容易地得到所需的效果,例如:在一个水平容器中布置所有具有垂直布局的面板。


使用ListDeque实现的一个好用例。 - trashgod

3

像BoxLayout和GridLayout这样的布局,在使用以下代码时会从上到下显示组件:

panel.add( someComponent );

但是你总是可以使用以下方法:

panel.add(someComponent, 0);

在顶部插入组件。

1

虽然这个答案与网格布局无关,但我强烈推荐使用JGoodies表单布局。它非常灵活。 http://www.jgoodies.com/freeware/forms/index.html

                          /* 1                    2      3       4    5                   6     7      8       9*/      
            String col1 = "left:max(20dlu;pref), 3dlu, 70dlu, 15dlu,left:max(10dlu;pref),10dlu, 70dlu, 70dlu, 70dlu";
                          /* 1   2     3   4  5   6    7   8    */
            String row1 = "  p, 5dlu, p, 3dlu, p, 5dlu, p, 9dlu, ";
            FormLayout layout = new FormLayout( col1, row1 + row2 + row3 + row4 + row5 + row6);

            JPanel panel = new JPanel(layout); 
             panel.setBorder(Borders.DIALOG_BORDER);

            // Fill the table with labels and components.
            CellConstraints cc = new CellConstraints();
            panel.add(createSeparator("Registration Information"), cc.xyw(1, 1, 7));
            panel.add(new JLabel("Patient ID"), cc.xy(1, 3));
            panel.add(pid, cc.xyw(3, 3, 1));
            panel.add(new JLabel("Date and Time"), cc.xy(5, 3));

您可以手动编写代码,在定义的布局中的任何位置绘制每个组件,例如相对于列和行。 甚至可以进行垂直排列。 阅读白皮书:http://www.jgoodies.com/articles/forms.pdf


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接