1

実行時に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);
}

私はしばらくこれに固執していて、私は明白な何かを逃しているように感じます。助言がありますか?

4

1 に答える 1

3

あなたのpaintComponent()方法が何もしないようです。特に、を交換するには、コンテナJLabelが必要です。validate()別の方法として、この単純なゲームModel–View–Controllerパターンを使用し、色付きのアイコンを描画する方法を確認することもできます。

補遺:この関連するIconでは、全体ではなく、だけを置き換える方法について説明しますJLabel。対照的に、このvalidate()は、コンポーネントを交換した後にコンテナを作成する方法を示しています。

于 2011-04-02T09:33:49.507 に答える