2

シナリオ:トップレベルにグリッドレイアウトを持つ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です。青い円は、ユーザーがゲームを見通すビューポートを表しており、プレーヤーアイコンを中央に配置する場所です。現在、ユーザーはビューポート周辺の非常にエレガントでないボタンを使用してグリッドを移動できます。それで十分かもしれませんが、ゲームの開始時に、プレーヤーはアイコンが見つかるまでグリッドを移動する必要があります。

4

2 に答える 2

3

ここJScrollNavigatorで調べたも参照してください。これにより、隣接するスクロール ペインにフル サイズで表示される世界全体のサムネイル画像をナビゲートできます。

画像

于 2012-10-13T00:50:21.733 に答える
1

頭のてっぺんから、あなたが望むすべての参照をある種のモデルに保存します。

このモデルを使用して、選択要件に基づいてビューを更新できます。

これにより、他の UI 要素を認識したり気にしたりすることなく、要素を見つけて更新するためのロジックを一元化できます。

于 2012-10-13T03:23:47.443 に答える