実行時に2D配列のJLabelを更新するのに問題があります。
私が取り組んでいるプログラムは、コネクトフォーの変種です。JLabelの2D配列を作成します。これはすべて、デフォルトで空白のスロットの画像を含むImageIconになります。プレーヤー1と2は色を選択し、プレーヤーの順番でクリックしてピースを列にドロップできます(重力によってピースが下に落ちるか、別のピースの上に着地するまで)。
addToColumnメソッドが正常に機能していることを確信しています。私の唯一の問題は、どのJLabelも更新できないように見えることです。これが私が取り組んでいる方法です:
p1、p2、およびcurrentはPlayerオブジェクトです。grid [] []は、0、1、または2に設定された整数の2D配列であり、誰がどのタイルを所有しているかをより簡単に追跡できます。tiles [] []は、JLabelの2D配列です。
public void addToColumn(int column) { // drop a tile in the specified column
int i = 0;
while (grid[column][5-i] != 0) i++; // move upward through the 6 rows of tiles
// until we find an empty one
if (current == p1) grid[column][5-i] = 1; // update to the current player's value
else grid[column][5-i] = 2;
tiles[column][5-i] = new JLabel(findColorIcon(current.getColor()));
tiles[column][5-i].setIcon(findColorIcon(current.getColor()));
repaint();
最後の2行でtiles[][]のJLabelが変更されているので、明らかに両方は必要ありません。どちらの方法が良いかわかりません...これは私が試したもののほんの一部ですが、役に立ちません。(私のgetColor()メソッドはColorを返し、findColorIcon(Color c)はそのタイルの色で対応するJLabelを返します)。
はい、paintComponentメソッドにも追加しました。
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
}
私はしばらくこれに固執していて、私は明白な何かを逃しているように感じます。助言がありますか?