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

次の画像を提供します

ここに画像の説明を入力してください

これは、各角括弧パターンが各行に対応しているため、3番目の行がセットアップの影響を受けたことを意味します。

しかし、行数が異なる場合、最後の行にどのように影響しますか?または、すべての行に影響を与える方法は?または、最後の行を個別に設定しながら、最後の行を除くすべての行に影響を与える方法はありますか?

行数がわからないという意味です。

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

このパターンは、一度に 1 行ずつ返される任意のメソッドに適用できますが、代わりに EOF を取得するかどうかはわかりません。

このようなフレームの追加が可能かどうかの問題には立ち入りません。これは、HTML ジェネレーターから盗んだ一般的なオフバイワン処理のトリックです。

于 2012-12-23T11:09:49.937 に答える