該場景:我有一個UI,其中包含JPanel
(稱爲topGrid
),並在頂層有JFrame
的網格佈局。在topGrid
之內,我已經將另一個JPanel
(midGrid
)與網格佈局放在一起。裏面midGrid
,是另一個JPanel
(bottomGrid
),它有一個JLabel
,我用圖像填充圖像取決於一個數組以及它們的實例在該數組內。如何讓我的頂級Jpanel將其位置設置爲相對於另一個jpanel網格中的jlabel?
目標:我希望topGrid
將其視圖集中在bottomGrid
中的特定對象上。 (當玩家圖標移動時,遊戲的網格移動到該圖標的中心位置,當遊戲開始時,它已經爲用戶居中。)
我已經考慮從bottomGrid
獲得該點並且試圖通過它到topGrid
但似乎並沒有拉正確的信息。我知道找到玩家的唯一途徑是遍歷所有組件並檢查實例。對於topGrid必須執行一次,而對於midGrid,則需要在bottomGrid中找到該玩家。然後傳遞Point數據。然後在適當的JPanel
上使用setLocation()減去距中心的距離。
有沒有其他人試過這個,並有一個更有效或優雅的方式去呢?我可以探索哪些其他選項?
感謝您的任何反饋意見。
創建內網格topGrid
的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
的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
內選手圖像。藍色圓圈代表視口用戶將看到遊戲並且是我希望玩家圖標居中的地方。目前,用戶可以在視口周圍的區域使用非常不雅的按鈕來移動網格。這可能就足夠了,但在遊戲開始時,玩家必須移動網格直到他們可以找到他們的圖標。
一些示例代碼將是很好 – MadProgrammer
1爲更新;它讓我想起了舊的[* AppleTrek *](http://en.wikipedia.org/wiki/Apple_Trek)。 – trashgod