シナリオ:トップレベルにグリッドレイアウトを持つJPanel(と呼ぶ) UIがあります。内に、グリッドレイアウトで別の( )を配置しました。の中には、配列とその配列内のインスタンスに応じて画像を入力する 別の()があります。topGridJFrametopGridJPanelmidGridmidGridJPanelbottomGridJLabel
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 StringbottomGridJPanelJLabelFlowLayout
視覚的な参照用:

緑の四角はtopGrid JPanel、赤の四角は、、midGrid JPanel黒の四角は、のbottomGrid JPanel中にプレーヤー画像の白い丸が付いたものJLabelです。青い円は、ユーザーがゲームを見通すビューポートを表しており、プレーヤーアイコンを中央に配置する場所です。現在、ユーザーはビューポート周辺の非常にエレガントでないボタンを使用してグリッドを移動できます。それで十分かもしれませんが、ゲームの開始時に、プレーヤーはアイコンが見つかるまでグリッドを移動する必要があります。
