我正在尝试实现以下基于图块的设置:
这是我的代码当前正在生成的内容:
下面是我当前生成的代码片段。为了澄清起见,我尝试将northCentralArea
和southCentralArea
组件(任务 3、任务 4... 等到 GRINNING LION TAVERN ;和 CASTLE WATERDEEP、高级选择 3... 等到 Intrigue Discard )组合成JPanel
它们自己的单个组件希望在设置中更容易对齐GroupLayout
。底部的“玩家区”也是自己的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))));
}
显然,我不明白要完成这项工作需要什么。任何帮助将非常感激。即使这意味着切换到不同的布局管理器(我希望以此作为学习 GroupLayout 的好机会)。干杯!