0

Java 学校の最後の課題でゲームを作成する必要があります。その中で、 for ループJPanelで拡張するカスタムメイドの「ペグ」オブジェクトを使用しています。JComponentJPanelを使用し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回目は機能しません。

ガイダンスのヒントは大歓迎です。それが役立つ場合の完全なコードは次のとおりです。

4

1 に答える 1

1

ばかげていると思いますが、理解できたと思います。配列に新しい「Peg」を追加し、それを JPanel に渡した後、 を呼び出していupdate()ました。ここで呼び出すとrevalidate()、新しい「ペグ」がパネルに追加されます。うまくいけば、これは同様の問題を抱えている他の人に役立ちます。

于 2012-12-18T18:50:08.900 に答える