シナリオ:トップレベルにグリッドレイアウトを持つJPanel
(と呼ぶ) UIがあります。内に、グリッドレイアウトで別の( )を配置しました。の中には、配列とその配列内のインスタンスに応じて画像を入力する 別の()があります。topGrid
JFrame
topGrid
JPanel
midGrid
midGrid
JPanel
bottomGrid
JLabel
topGrid
目標:にある特定のオブジェクトにビューを集中させたいと思いますbottomGrid
。(プレーヤーのアイコンが移動すると、ゲームのグリッドがそのアイコンの中央に移動し、ゲームが開始されると、既にユーザーの中央に配置されているゲームを想像してください。)
ポイントを取得しbottomGrid
て渡すことを検討しましtopGrid
たが、正しい情報を取得していないようです。プレーヤーがどこにいるかを知る唯一の方法は、すべてのコンポーネントを反復処理してインスタンスをチェックすることです。これは、topGridに対して1回実行し、midGridがbottomGridでプレーヤーを見つけるためにもう一度実行する必要があります。次に、ポイントデータを渡します。JPanel
次に、適切なマイナスの中心からの距離でsetLocation()を使用します。
他の誰かがこれを試し、それを実行するためのより効果的またはエレガントな方法を持っていますか?他にどのようなオプションを検討できますか?
フィードバックをありがとうございます。
topGrid
's内にグリッドを作成するJPanel
:
public void createTopGrid()
{
int rows = galaxy.getNumRows();
int columns = galaxy.getNumColumns();
pnlGrid.removeAll();
pnlGrid.setLayout(new GridLayout(rows, columns));
for (int row = 0; row < rows; row++)
{
for (int col = 0; col < columns; col++)
{
Position pos = new Position(galaxy, row, col);
Sector sector = galaxy.getSector(pos);
GalaxySector sectorUI = new GalaxySector(sector);
pnlGrid.add(sectorUI);
}
}
}
midGrid
's内にグリッドを作成するJPanel
:
public void createOccupantIcons()
{
pnlGridOccupants.removeAll();
Occupant[] occs = sector.getOccupantsAsArray();
for ( Occupant occ : occs )
{
GalaxyOccupant occupant = new GalaxyOccupant(occ, sector);
pnlGridOccupants.add(occupant);
}
}
の各居住者の画像アイコンは、クラスのモデルのmidGrid
から引き出され、必要に応じてに追加されます。IconRep
String
bottomGrid
JPanel
JLabel
FlowLayout
視覚的な参照用:
緑の四角はtopGrid
JPanel
、赤の四角は、、midGrid
JPanel
黒の四角は、のbottomGrid
JPanel
中にプレーヤー画像の白い丸が付いたものJLabel
です。青い円は、ユーザーがゲームを見通すビューポートを表しており、プレーヤーアイコンを中央に配置する場所です。現在、ユーザーはビューポート周辺の非常にエレガントでないボタンを使用してグリッドを移動できます。それで十分かもしれませんが、ゲームの開始時に、プレーヤーはアイコンが見つかるまでグリッドを移動する必要があります。