How do I make this tile-based GUI with GroupLayout (or any other layout!)
-
14-10-2022 - |
質問
I am trying to achieve the following sort of tile-based setup :
This is what my code is currently producing :
Below is my current code snippet that is generating this. For clarification, I have tried to combine the northCentralArea
and southCentralArea
components (Quest 3, Quest 4... etc. to THE GRINNING LION TAVERN; and CASTLE WATERDEEP, Advanced Choice 3... etc. to Intrigue Discard) into single JPanel
components of their own in hopes that it would be easier to align within the GroupLayout
setup. The "player area" at the bottom is also in its own JPanel
.
private void generateLayout() {
GroupLayout layout = new GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);
layout.setHorizontalGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGap(100)
.addComponent(advancedBuildingTiles[20])
.addComponent(advancedBuildingTiles[12])
.addComponent(advancedBuildingTiles[6])
.addComponent(advancedBuildingTiles[14])
.addComponent(advancedBuildingTiles[23])
.addGap(100))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGap(50)
.addComponent(advancedBuildingTiles[16])
.addComponent(advancedBuildingTiles[8])
.addComponent(advancedBuildingTiles[2])
.addComponent(advancedBuildingTiles[0])
.addComponent(advancedBuildingTiles[4])
.addComponent(advancedBuildingTiles[11])
.addComponent(advancedBuildingTiles[19])
.addGap(50))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.CENTER)
.addGroup(layout.createSequentialGroup()
.addComponent(availableQuests[0])
.addComponent(availableQuests[1]))
.addComponent(northCentralArea)
.addGroup(layout.createSequentialGroup()
.addComponent(basicBuildingTiles[6])
.addComponent(advancedBuildingChoices[1])
.addComponent(advancedBuildingChoices[2])
.addComponent(basicBuildingTiles[7]))
.addComponent(southCentralArea)
.addComponent(playerArea))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGap(50)
.addComponent(advancedBuildingTiles[18])
.addComponent(advancedBuildingTiles[10])
.addComponent(advancedBuildingTiles[5])
.addComponent(advancedBuildingTiles[1])
.addComponent(advancedBuildingTiles[3])
.addComponent(advancedBuildingTiles[9])
.addComponent(advancedBuildingTiles[17])
.addGap(50))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGap(100)
.addComponent(advancedBuildingTiles[22])
.addComponent(advancedBuildingTiles[15])
.addComponent(advancedBuildingTiles[7])
.addComponent(advancedBuildingTiles[13])
.addComponent(advancedBuildingTiles[21])
.addGap(100)));
layout.setVerticalGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addGap(200)
.addComponent(availableQuests[0])
.addComponent(availableQuests[1]))
.addGap(200)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(50)
.addComponent(advancedBuildingTiles[16])
.addComponent(northCentralArea)
.addComponent(advancedBuildingTiles[18])
.addGap(50))
.addGroup(layout.createSequentialGroup()
.addComponent(advancedBuildingTiles[20])
.addComponent(advancedBuildingTiles[8])
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(advancedBuildingTiles[10])
.addComponent(advancedBuildingTiles[22]))
.addGroup(layout.createSequentialGroup()
.addComponent(advancedBuildingTiles[12])
.addComponent(advancedBuildingTiles[2])
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(advancedBuildingTiles[5])
.addComponent(advancedBuildingTiles[15]))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(advancedBuildingTiles[6])
.addComponent(advancedBuildingTiles[0])
.addComponent(basicBuildingTiles[6])
.addComponent(advancedBuildingChoices[1])
.addComponent(advancedBuildingChoices[2])
.addComponent(basicBuildingTiles[7])
.addComponent(advancedBuildingTiles[1])
.addComponent(advancedBuildingTiles[7]))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(advancedBuildingTiles[14])
.addComponent(advancedBuildingTiles[4])
.addComponent(southCentralArea)
.addComponent(advancedBuildingTiles[3])
.addComponent(advancedBuildingTiles[13]))
.addGroup(layout.createSequentialGroup()
.addComponent(advancedBuildingTiles[23])
.addComponent(advancedBuildingTiles[11])
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(advancedBuildingTiles[9])
.addComponent(advancedBuildingTiles[21]))
.addGroup(layout.createSequentialGroup()
.addGap(50)
.addComponent(advancedBuildingTiles[19])
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(advancedBuildingTiles[17])
.addGap(50))
.addGap(200)
.addComponent(playerArea)
.addGap(200))));
}
Clearly I am not understanding what it takes to make this work. Any help would be much appreciated. Even if it means switching to a different layout manager (I was hoping to use this as a good opportunity to learn GroupLayout). Cheers!
正しい解決策はありません