Java 学校の最後の課題でゲームを作成する必要があります。その中で、 for ループJPanel
で拡張するカスタムメイドの「ペグ」オブジェクトを使用しています。JComponent
はJPanel
を使用しGridBagLayout
ます。for ループ内で、「ペグ」オブジェクトを に追加しArrayList
、そこから要素を取得してArrayList
に追加しJPanel
ます。これはすべて、次のようなメソッドで行われます。
public void createDummyPegs()
{
for (int i = 0; i < 13; i++)
{
initPegsArray.add(new ArrayList<>());
dummyPegsConstraints.gridy = i;
for (int j = 0; j < 5; j++)
{
dummyPegsConstraints.gridx = j;
if (i == 0)
{
tempColorPeg = new ColorPeg(Color.DARK_GRAY);
initPegsArray.get(i).add(j, tempColorPeg);
pegsLeftPanel.add((JComponent) initPegsArray.get(i).get(j),
dummyPegsConstraints);
}
else
{
tempDummyPeg = new DummyPeg();
initPegsArray.get(i).add(j, tempDummyPeg);
pegsLeftPanel.add((JComponent) initPegsArray.get(i).get(j),
dummyPegsConstraints);
}
}
}
}
これは問題なく動作し、これらの「ペグ」オブジェクトのグリッドを適切に生成します。ここに問題があります。理想的には、これらの「ペグ」オブジェクトの 1 つを別の色の別の「ペグ」オブジェクトに置き換えるボタンがあります。ボタンをクリックすると、次のようになります。
- 新しい別の色で新しい「ペグ」オブジェクトを作成します。
- から要素を削除し
ArrayList
ます。最初のものにしましょう。 - 古い「ペグ」があった位置に新しい「ペグ」を追加します(もちろん、古い「ペグ」があった場所に最終的に配置され、他のすべてが1だけ右にシフトされると仮定します.
set()
または、メソッドを使用して、指定された位置の要素を新しい「ペグ」で更新しようとしました。問題は、新しい「Peg」要素を追加すると、サイズで初期化されていないように見えることです。この新しい「ペグ」をSystem.out.println()
ステートメントに送信して、その内容を読み取ると、次のように出力されます。
com.rburgos.mastermindtestlayout.ColorPeg[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=,minimumSize=,preferredSize=]
最初に追加すると機能する理由がわかりませんArrayList
が、2回目は機能しません。
ガイダンスのヒントは大歓迎です。それが役立つ場合の完全なコードは次のとおりです。