我每5列有一个GridBagLayout 5行。我试图跨越我的第一个对象,即3行和5列的TilePanel。它'部分工作。
我有第4行和第5行的对象。我希望前3行比第4行和第5行占用更多空间。实际上,空间同样被分割到窗口上。我究竟做错了什么?请参阅下面的代码段和屏幕截图:
setLayout(new GridBagLayout());
GridBagConstraints grid = new GridBagConstraints();
// Initialize all the UI components
tilePanel = new TilePanel(gameModel);
grid.fill = GridBagConstraints.BOTH;
// Grid 5 lines by 5 columns
grid.weightx = 5;
grid.weighty = 5;
// tilePanel takes 3 lines and 5 columns
grid.gridwidth = 5;
grid.gridheight = 3;
grid.gridx = 0;
grid.gridy = 0;
this.add(tilePanel, grid);
// Forth Line
goal = new JLabel("Goal: " + gameModel.getGameResult());
currentSum = new JLabel("Current sum: 0");
nextButton = new JButton("NEXT");
resetButton = new JButton("RESET");
grid.gridwidth = 1;
grid.gridheight = 1;
// Forth Line: First column
grid.gridy = 4;
grid.gridx = 0;
this.add(nextButton, grid);
// Forth Line: Second column
grid.gridx = 1;
this.add(resetButton, grid);
// Firth Line
grid.gridy = 5;
// Firth Line: First column
grid.gridx = 0;
goal.setBorder(new LineBorder(Color.BLACK, 1));
this.add(goal, grid);
// Firth Line: Second column
grid.gridx = 1;
currentSum.setBorder(new LineBorder(Color.BLACK, 1));
this.add(currentSum, grid);
// Firth Line: Third column
grid.gridx = 2;
this.add(new JLabel("TIME"), grid);
// Firth Line: Fourth column
grid.gridx = 3;
this.add(new JLabel("RESET"), grid);
// Firth Line: Fifth column
grid.gridx = 4;
this.add(new JLabel("LEVEL"), grid);
Window的屏幕截图:
答案 0 :(得分:1)
我正试图跨越我的第一个对象,即3行上的TilePanel
你不能只说一个组件跨越3行。
任何给定线条的高度取决于添加到该线条的组件的高度。如果不向行添加组件,则该行没有高度。
在您的示例中,添加gridy
为0,4,5的组件。因此,gridy
中没有1,2,3的组件,因此每个网格的高度均为0。
如果每个行中都有组件,则只能跨行。因此,如果您添加了5个组件,其中gridy
为0,1,2,3,4,那么您可以添加第6个组件(到另一个列),gridy
为0,并带有{ {1}}的3.然后此组件的高度等于网格0,1和2中组件的高度。
如果您希望第一行更大,那么您可以使用gridheight
值为标题面板提供额外的空间。阅读How to Use GridBagLayout上Swing教程中的部分,了解有关所有约束的更多信息和工作示例。
答案 1 :(得分:0)
weightx和weighty应为浮点值,最小值为0.0,最大值为1.0。价值1.0意味着"获得尽可能多的空间",0.0意味着"你是最后一个获得额外空间的人#34;。你给出5的值,GridBagLayout可能正在制作......不管它做什么。
我会尝试在添加tilePanel时将weigthx设置为1.0并将weighty设置为0.6(垂直空间的60%),并在添加其余时将weighty设置为0.2(每行20%的垂直空间)。
但我还没有测试过它。