0

私は基本的に、swing を使用してメイン GUI をペイントする専用の ClueGame というクラスを 1 つ持っています。

このクラスでは、BoardCell オブジェクトのリストを繰り返し処理し、paintComponents(Graphics g) 内から boardcell.draw(g) を呼び出して、ボードに四角形を描画します。

ただし、完全に別のクラスである WalkwayCell クラス (BoardCell の子) では、特定の四角形の色を更新する必要があります。cell.updateColor() のようなものを考えています

しかし、明らかに、何らかの方法でそれを行うには描画を取得する必要があります。グラフィックス オブジェクトがないため、draw を呼び出すことができないため、ボード上の 1 つのオブジェクト (四角形) の色を更新する方法がわかりません。

うまくいけば、それは理にかなっています。誰かがリクエストした場合、コードを投稿できます。

4

2 に答える 2

3

選択肢はいくらでもあります...

あなたは出来る

ClueGameあなたの参照をインスタンスに渡し、その参照を直接WalkwayCell呼び出すことができます。repaintClueGame

これに関する問題は、クラス全体ClueGameを のインスタンスに公開することですWalkwayCell。これにより、クラスがやりたいことが何でもできるようになります...

あなたは出来る

オブザーバ パターンを使用して、 がのClueGame状態の変化を監視できるようにします。WalkwayCell

これはWalkwayCell、オブジェクトの状態が変化したときに何らかのイベント通知を提供し、アプリケーションの一部を知る権利のない他の部分に公開しないことを意味します...

Swing は、リスナー API にオブザーバー パターンを利用します。いくつかのアイデアについては、 Writing Event Listenersを参照してください...

于 2013-11-01T02:04:03.903 に答える
2

Swing GUI を作成する場合、GUI モデル クラスを作成することが重要です。モデル クラスは、GUI のデータを保持します。モデル クラスを使用すると、Swing ビュー クラスのコーディングが非常に簡単になります。

あなたの場合、提案したように、cell.updateColor() のようなメソッドを使用して、WalkwayCell クラスのインスタンスの状態を変更します。まず、モデル インスタンスを更新します。次に、モデル インスタンスをビューに描画します。

Hangman Swing GUIの記事で、実際の例を使用してこの概念について詳しく説明しました。

于 2013-11-01T08:19:42.370 に答える