Java Swing GridBagLayout()跨越一个对象3行不起作用

时间:2018-02-13 19:23:19

标签: java swing layout-manager gridbaglayout

我每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的屏幕截图:

https://i.stack.imgur.com/xngBG.png

2 个答案:

答案 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%的垂直空间)。

但我还没有测试过它。