2011-12-06 5 views
2

Java Swing GUIを作成していて、GridLayoutを使用するようにJPanelをフォーマットしました。グリッドの特定の「ボックス」(つまり特定の座標)にアクセスする必要がありますが、その方法はわかりません。Java Swing Gridlayout:仕様座標系へのアクセス

方法がありますか?これどうやってするの?

ありがとうございました!

+0

[タワーズオブハノイ](http://stackoverflow.com/questions/7747691/solving-recursive-towers-of-hanoi-in-lisp)のビューを作成していますか? – trashgod

+0

* "は、グリッドの特定の"ボックス "(すなわち特定の座標)にアクセスする必要があります。" * 1)エンドユーザーに提供するプログラム機能は何ですか?グリッドのセルには何がありますか? –

+0

@trashgodいいえ私はハノイのタワーズで働いていません - 私はゲームのGUIを作っていますが。 – kubasub

答えて

3

プログラムデータ(モデル)に関する情報を得るためにGUIコード(ビュー)に依存しないでください。最良の解決策は、どのコンポーネントが最初からどこにあるのかを「知る」ことです。コンポーネントを保持し、グリッドに何かが追加されるたびに更新されるデータ構造(2D配列?

しかし、迅速かつ非常に汚い修正をしたい場合は、JPanel.getComponentAt()でゲームを始めることができます。ただし、これにはピクセル座標が必要です。したがって、リバースエンジニアリングを実行して、指定されたグリッドがどのくらいのスペースを占めるかを把握する必要があります。グリッドの四角の間のスペースはis given by your GridLayout objectです。これははお勧めしません。私は完全性のためにそれを含めるだけです(あなたの質問に対するよりリテラルな応答なので)。

+0

さて、私は何が間違っているのか分かっていると思う。 私はちょうどXのグリッドを埋めるためにJLabelsの束を追加していました。私はどんなデータ構造にもJLabelsを格納していませんでした。 私は今、それを試してみます、ありがとう! – kubasub

+2

@ KubaSub、JLabelsを保存しないでください。モデルとビューを再度混合することになります。 GUIなしでゲームをプレイできるようにしてから、ゲームにGUIを追加すると、UIコンポーネントをデータストアとして使用するように誘惑されません。 – Paul

+1

@Paulは良い点を挙げています。この[MCVの例](http://stackoverflow.com/a/3072979/230513)も参照してください。 – trashgod

1

GridLayoutでは、「コンテナは等しいサイズの矩形に分割されています。何も表示したくない場所に、空の透明なコンポーネントを追加することができます。 new JLabel("")GridBagLayoutおよびUsing Layout Managersも参照してください。

+0

トグルボタンのグリッドを使用するこの[game](http://sites.google.com/site/drjohnbmatthews/buttons)からいくつかのアイデアを得るかもしれません。 – trashgod