0

皆さん、こんにちは。

Eclipse WindowBuilder で FormLayout を使用して JPanel を作成できるようにしたので、この作成を動的にしたいと考えました。これは、作成中のプログラムで 1000 行の長さを避けるためにそのようにする必要があるためです。次のコードを使用しました。

JPanel pData = new JPanel();
pData.setBounds(10, 232, 381, 163);


FormLayout fLayout= new FormLayout(new ColumnSpec[]{}, new RowSpec[]{});

int numCols = 5;
int numRows = 10;

for(int i=1;i<=numCols;i+=2)
{
    fLayout.insertColumn(i, FormFactory.RELATED_GAP_COLSPEC);
    fLayout.insertColumn(i+1, FormFactory.DEFAULT_COLSPEC);
}

for(int j=1;j<=numRows;j+=2)
{
    fLayout.insertRow(j, FormFactory.RELATED_GAP_ROWSPEC);
    fLayout.insertRow(j+1, FormFactory.DEFAULT_ROWSPEC);
}

pData.setLayout(fLayout);
getContentPane().add(pData);

しかし、プログラムを開始すると、次のエラーのスタックが表示されます。

「列インデックス 1 は [1, 0] の範囲内にある必要があります」

for ループのインデックスを変更すると、このエラー テキストの途中の数字が変更されるだけですが、残りは同じままです。

私は何を間違っていますか?FormLayout を動的に作成することさえ可能ですか? よろしくお願いします。

追加情報: FormLayout を使用している理由は、列のサイズが異なるためです。GridBagLayout も同様に実行できることはわかっていますが、インセットと位置に関して同じ結果を得るには、さらに多くの行と数が必要です。しかし、それが唯一の賢明な選択肢である場合、私はそれを受け入れます...それが動的である限り;-)

4

1 に答える 1

2

「insertRow()/insertColumn()」の動作に関係しています。何かを挿入するには、間に挿入する行/列がすでに必要です。代わりに「.appendRow()/.appendColumn()」を使用する必要があります。これは、既存の行の下部または既存の列の右側に新しい行または列を追加するだけです。

元:

int numCols = 2;
int numRows = 10;

for(int i=1;i<=numCols;i++)
{
    fLayout.appendColumn(FormFactory.RELATED_GAP_COLSPEC);
    fLayout.appendColumn(FormFactory.DEFAULT_COLSPEC );
}

for(int j=1;j<=numRows;j++)
{
    fLayout.appendRow(FormFactory.RELATED_GAP_ROWSPEC);
    fLayout.appendRow(FormFactory.DEFAULT_ROWSPEC);;
}
this.setLayout(fLayout);

これにより、既存のものに 4 つの列 (2 つのデフォルトと 2 つの関連するギャップ) と 4 つの行 (2 つのデフォルトと 2 つの関連するギャップ) が追加されます。

于 2013-07-18T17:41:05.077 に答える