Java Swing GUIを作成していて、GridLayoutを使用するようにJPanelをフォーマットしました。グリッドの特定の「ボックス」(つまり特定の座標)にアクセスする必要がありますが、その方法はわかりません。Java Swing Gridlayout:仕様座標系へのアクセス
方法がありますか?これどうやってするの?
ありがとうございました!
Java Swing GUIを作成していて、GridLayoutを使用するようにJPanelをフォーマットしました。グリッドの特定の「ボックス」(つまり特定の座標)にアクセスする必要がありますが、その方法はわかりません。Java Swing Gridlayout:仕様座標系へのアクセス
方法がありますか?これどうやってするの?
ありがとうございました!
プログラムデータ(モデル)に関する情報を得るためにGUIコード(ビュー)に依存しないでください。最良の解決策は、どのコンポーネントが最初からどこにあるのかを「知る」ことです。コンポーネントを保持し、グリッドに何かが追加されるたびに更新されるデータ構造(2D配列?
しかし、迅速かつ非常に汚い修正をしたい場合は、JPanel.getComponentAt()
でゲームを始めることができます。ただし、これにはピクセル座標が必要です。したがって、リバースエンジニアリングを実行して、指定されたグリッドがどのくらいのスペースを占めるかを把握する必要があります。グリッドの四角の間のスペースはis given by your GridLayout
objectです。これははお勧めしません。私は完全性のためにそれを含めるだけです(あなたの質問に対するよりリテラルな応答なので)。
さて、私は何が間違っているのか分かっていると思う。 私はちょうどXのグリッドを埋めるためにJLabelsの束を追加していました。私はどんなデータ構造にもJLabelsを格納していませんでした。 私は今、それを試してみます、ありがとう! – kubasub
@ KubaSub、JLabelsを保存しないでください。モデルとビューを再度混合することになります。 GUIなしでゲームをプレイできるようにしてから、ゲームにGUIを追加すると、UIコンポーネントをデータストアとして使用するように誘惑されません。 – Paul
@Paulは良い点を挙げています。この[MCVの例](http://stackoverflow.com/a/3072979/230513)も参照してください。 – trashgod
GridLayout
では、「コンテナは等しいサイズの矩形に分割されています。何も表示したくない場所に、空の透明なコンポーネントを追加することができます。 new JLabel("")
。 GridBagLayout
およびUsing Layout Managersも参照してください。
トグルボタンのグリッドを使用するこの[game](http://sites.google.com/site/drjohnbmatthews/buttons)からいくつかのアイデアを得るかもしれません。 – trashgod
[タワーズオブハノイ](http://stackoverflow.com/questions/7747691/solving-recursive-towers-of-hanoi-in-lisp)のビューを作成していますか? – trashgod
* "は、グリッドの特定の"ボックス "(すなわち特定の座標)にアクセスする必要があります。" * 1)エンドユーザーに提供するプログラム機能は何ですか?グリッドのセルには何がありますか? –
@trashgodいいえ私はハノイのタワーズで働いていません - 私はゲームのGUIを作っていますが。 – kubasub