如何设置最后一行或除了最后一行不知道MigLayout中的行数?

时间:2012-10-11 16:41:58

标签: java swing layout-manager miglayout

以下代码

            int numberofrows = 3;

            JFrame frame = new JFrame("Question 12844473");

            frame.setLayout(new MigLayout("fill, debug", "", "[][][150]"));

            for(int i=0; i<numberofrows-1; ++i) {
                frame.add(new JButton("Button #" +i), "wrap");
            }
            frame.add(new JButton("Exit"));

            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

            frame.pack();
            frame.setVisible(true);

提供以下图片

enter image description here

意味着第三行受设置影响,因为每个方括号模式对应于每一行。

但如果行数变化,如何影响最后一行呢?或者如何影响所有行?或者如何影响除最后一行之外的所有行,同时单独设置最后一行?

我的意思是不知道行数。

2 个答案:

答案 0 :(得分:3)

您不能一般地设置行约束,以便它们适用于任意数量的行。但是,您始终知道行数,否则您也无法呈现该行数。知道行数,您可以以编程方式生成约束字符串。 E.g。

 String rowConstraint = ""
 rowConstraint += "[]"
 for(int i = 1; i < numberOfRows - 1; i++) {
    rowConstraint += "[150]"
 }     
 rowConstraint += "[]"

 frame.setLayout(new MigLayout("fill, debug", "", rowConstraint));

答案 1 :(得分:1)

你的意思是你处于这种情况:

JFrame frame = new JFrame("Question 12844473");

frame.setLayout(new MigLayout("fill, debug", "", "[][][150]"));

while( 0 != (i = hasRow()))
{
    frame.add(new JButton("Button #" +i), "wrap");
}

...现在当hasRow()返回0时,为时已晚,因为您已经在之前的迭代中添加了一个框架,并且您无法取消添加并重新添加其他方式。

你可以这样做:

prev = hasRow();
while( 0 != (i = hasRow()))
{
    frame.add(new JButton("Button #" + prev), "wrap");
    prev = i;
}
// Now prev is the value of the last-but-one element returned
// and you can process it differently.
frame.add(new JButton("Button #" + prev));

您可以将此模式调整为任何方法,一次返回一行,但不知道您是否会获得EOF。

我不知道是否可以完成这样的帧添加:这只是一个通用的逐个处理技巧,我将HTML生成器扯掉了。