1

以下代码

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

提供以下图片

在此处输入图像描述

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

但是如果行数不同,如何影响最后一行?或者如何影响所有行?或者如何影响除最后一行之外的所有行,同时分别设置最后一行?

我的意思是不知道行数。

4

2 回答 2

3

您不能一般地设置行约束以使其适用于任意数量的行。但是,您始终知道行数,否则您也无法渲染该行数。知道行数后,您可以以编程方式生成约束字符串。例如

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

 frame.setLayout(new MigLayout("fill, debug", "", rowConstraint));
于 2012-12-23T10:55:50.417 回答
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 生成器中抄袭的一个通用的一次性处理技巧。

于 2012-12-23T11:09:49.937 回答