Javaでマウスイベントのために多くの異なるオプションを処理するための標準的な方法はありますか?
-
12-09-2019 - |
質問
私はJavaでのグリッドベースのsimのゲームを開発していて、次のことを行うための標準的な方法があれば、私は思っていました。 私はゲームパネルでパネルを持ち、そしてパネルをクリックしたときに発生する可能性があり、さまざまなものがあります。部屋を構築するとき、例えば、マウスと左クリックをドラッグすると、異なるアクションを持つことになりますいくつかの段階があります。 今、私はそれを行っている方法は、構築されているものをチェックするブール値を使用することであり、それがであるどの段階ます。
このようなものを扱うの任意のより良いまたは標準的な方法はありますか?私は簡単にGoogleを持っていたが、私は前に述べたように、スタックオーバーフローの人々は、常に最新の解答までの、より良い、より適切与えます。
私はまだJavaへのかなり新しい自分を検討します。
事前に感謝します。
解決
あなたは戦略パターンに似たものに探してみてください。
基本的に、あなたは、ツールバー上の部屋のボタンをクリックして起動します。ツールバーが通過し、「部屋の場所」ActionListenerを使用するようにグリッドに指示します。おそらく
を聞いていた以前のアクションリスナーを削除します部屋の場所のActionListenerは、順番に
など、ドラッグ、右/左クリックのためのロジックのすべての興味深いビットを実装しますあなたは(そして、ドア、窓、そしてトラップドアを設置する、と言う)の部屋を構築するための複数のステージを持っている場合は、有限ステートマシンのビットを:アクションリスナーは、次のステージへの制御をハンドオフのための責任を負うことになります。
だから、「部屋」ボタンをクリックすることで起動し、「場所の部屋」リスナーが追加されます。あなたが部屋になりたいエリアをドラッグして、「場所の部屋」は、 '場所のWindowsのリスナーにActionListenerを変更し、ゲームの状態を変更します。無限...あなたが終わるまでます。
1つの非常に簡単な(非コンパイル)例:
class GridPanel extends JPanel
{
void SetMouseListener(MouseListener newListener)
{
for(MouseListener ml : getMouseListeners())
removeMouseListener(ml);
addMouseListener(newListener);
}
}
class ControlPanel extends JPanel
{
GridPanel gameGrid;
void OnRectangleButtonClicked(some stuff)
{
gameGrid.SetMouseListener(new PlaceRoomListener(gameGrid));
}
}
class PlaceRoomListener extends MouseAdapter
{
GridPanel gameGrid;
//constructor, etc
void OnClick(mouse event)
{
gameGrid.doCoolStuff();
gameGrid.SetMouseListener(new PlaceTrapDoorListener());
}
}
//etc
さて、その非コンパイル例はさておき、Pyrolisticalはポイントを持っている:あなたは、一般的なクラスの1つのグロブにあなたのゲームモデルとグラフィックインターフェースを結合する必要はありません。あなたは、モデルがGUIから分離し、明確に定義されたインタフェースを介して、それを操作したい。
タグ(また、マウスリスナーを削除するについて行くために、おそらくより良い方法があるそしてちょうどランダムにすべてのリスナーを削除...私は申し訳ありませんが、ラッシュのビットでした)
他のヒント
これが鳴ります。
あなたはMVCを使用していますか?