2

场景:我有一个 UI,其中包含一个JPanel(调用它),在顶层topGrid有一个网格布局。JFrame在 内topGrid,我放置了另一个JPanel( midGrid) 与网格布局。内部midGrid, 是另一个JPanel( bottomGrid) ,JLabel我根据数组填充图像以及它们在该数组中的实例。

目标:我希望将topGrid其视图集中在bottomGrid. (想象一个游戏,当玩家图标移动时,游戏的网格会移动到该图标的中心,并且当游戏开始时,它已经以用户为中心。)

我考虑过从中获取点bottomGrid并尝试将其传递给topGrid但似乎没有提取正确的信息。我知道找到玩家所在位置的唯一方法是遍历所有组件并检查实例。这必须为 topGrid 执行一次,然后再为 midGrid 执行一次以在 bottomGrid 处找到玩家。然后传递点数据。然后使用 setLocation() 适当JPanel减去距中心的距离。

有没有其他人尝试过这个并且有更有效或更优雅的方式来解决它?我还可以探索哪些其他选择?

感谢您的任何反馈。

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中的模型中提取,并根据需要添加到中。bottomGridJPanelJLabelFlowLayout

视觉参考:

图片

其中绿色方块是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 回答