2012-04-14 14 views
1

私はそれに3つのゲームを実装するゲームを作っています。 1つのクラスで自分のコードを始めました。私はエラーが発生しているMVC形式に移動したいからです。私はGameViewクラスのすべてのコードを書いて始めましたが、今ではこのクラスのコードをSViewクラスに移動したいと思っています。問題は、GameViewクラスのJFrameを初期化していて、コードをSViewクラスに移動すると変数フレームが見つからないということです。だから私はそれをパネルにしてからそれを動かすように言われましたが、それは単に私のゲームを台無しにしています。MVC Javaで自分のコードを実装する方法は?

答えて

1

あなたは物事を少しずつ組織しなければなりません。考慮すべき事項:

  • GameViewメインウィンドウですか?そのようにしてくださいGameView extends JFrame
  • SViewはパネルですか?それをそう作るSView extends Panel。考える

もう一つ:SViewはあなたGameViewに追加するいくつかのパネルであるが、それは自体を追加するSViewの責任ではありません。あなたはまた、GameViewではなく、コンストラクタコードでnew SView()を追加する可能性がありf.e:

GameView gameView = new GameView(); 
gameView.add(new SView()); 

、代わりに、単にインスタンス化し、これらのクラスの両方の外でどこかにこれらの部品を組み立てます。

とにかく、ここでの主な点は、コンポーネントが独自のコンテンツ/子を作成するだけで、そのコンポーネント自体を親に追加することには関与しないことです。

幸運。

+0

JFrameまたはJPanelを拡張するためのクラスの元のポスターのコードでは、正当な理由はありません。 –

+0

最後の行はどうすればよいですか?パラメータにフレームがあります。 panel.setLocation((frame.getWidth() - panel.getWidth())/ 2,80); –

1

ヒント:

  • あなたは簡単のJPanelを入れ替えることができるように、メインGUIはCardLayoutを使用します。
  • ゲームメニューを選択する主な機能は、JPanelsをスワップすることです。そのため、選択したゲームが視覚化され、選択されたゲームが初期化されます。
  • 各ゲームで個別に作業します。ゲームを保持するためのJPanelを作成するために、個々のゲームクラスを用意してください。各ゲームクラスに、JFrameを作成し、ゲームクラスインスタンスを作成し、インスタンスのJPanelをJFrameに配置し、ゲームを初期化して表示するテストの主要メソッドを与えます。
  • ゲームが単独で機能したら、複数のゲームを表示できる大きなGUIにゲームを追加してみてください。
  • 各ゲームクラスに共通の機能の共通インターフェイスを実装することを検討してください。たとえば、各ゲームクラスがオーバーライドするinitialize()メソッドをインターフェイスに与えることができます。
  • 各ゲームクラスは、モデル、このモデルとやりとりするコントロールクラス、および前述のJPanelでモデルの状態を表示するビュークラスを持つように、MVCベースである必要があります。
+1

+1優れたデザインアドバイス; ['MainPanel'](http://stackoverflow.com/a/3072979/230513)は、ポイント3の例です。任意の数のインスタンスを使用して、より大きなGUIのプロトタイプを作成できます。 – trashgod

+0

@trashgod:ありがとう。ここでは、MVCの例の私のリンクです:[MVC_ProgressBarThread](http://stackoverflow.com/questions/5533497/mvc-progress-bar-threading/5533581#5533581) –

+0

良い[例](http://stackoverflow.com/questions/5533497/mvc-progress-bar-threading/5533581#5533581);オブザーバーのパターンを実装する方法として、私はこれを引用した(http://stackoverflow.com/a/3072979/230513)。必要に応じて私のものを編集するのをためらってはいけません。 – trashgod

関連する問題