我有两个桌子和两个按钮。我希望表格1位于第一列,并且宽度最大为3个单位,然后我希望表格右侧的两个按钮更窄(宽度为1个单位),我希望按钮1位于顶部,按钮2位于上方底部。现在在这些按钮的右侧,我希望另一个表(表2)再次宽至3个单位。为此,我使用了以下约束:
//table1
c = new GridBagConstraints(0, 0, 3, 2, 1, 1,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0);
c.fill = GridBagConstraints.BOTH;
outerPanel.add(all_app_scrollpane, c);
//button1
c = new GridBagConstraints(3, 0, 1, 1, 1, 1,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0);
outerPanel.add(addButton, c);
//button2
c = new GridBagConstraints(3, 1, 1, 1, 1, 1,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0);
outerPanel.add(removeButton, c);
//table2
c = new GridBagConstraints(4, 0, 3, 2, 1, 1,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0);
c.fill = GridBagConstraints.BOTH;
outerPanel.add(curr_app_scrollpane, c);
让我们看一下table1的GridBagCOnstraints。据我所知,第一个参数指出它将从0.列开始,并将是3列宽(第三个参数)。
然后button1从第三列开始,将是一列宽。但是我认为我知道一些错误,因为结果与我期望的非常不同。
我希望这些按钮更窄,表格更宽。我怎样才能做到这一点?我想使用GridBag完成此操作,因为这个小面板只是一个非常复杂的GUI的一小部分,整个GUI是使用gridbag设计的。所以我不想更改编码样式。
最佳答案
您必须设置布局的增长设置(权重),以便仅左和右列在增长。
像这样:
contentPane.setLayout(new GridBagLayout());
((GridBagLayout)contentPane.getLayout()).columnWidths = new int[] {0, 0, 0, 0};
((GridBagLayout)contentPane.getLayout()).rowHeights = new int[] {0, 0, 10, 0, 0, 0};
((GridBagLayout)contentPane.getLayout()).columnWeights = new double[] {1.0, 0.0, 1.0, 1.0E-4};
((GridBagLayout)contentPane.getLayout()).rowWeights = new double[] {1.0, 0.0, 0.0, 0.0, 1.0, 1.0E-4};
//---- leftBtn ----
leftBtn.setText("left Button");
contentPane.add(leftBtn, new GridBagConstraints(0, 0, 1, 5, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 0, 0));
//---- rightBtn ----
rightBtn.setText("right Button");
contentPane.add(rightBtn, new GridBagConstraints(2, 0, 1, 5, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 0, 0));
//---- addBtn ----
addBtn.setText("add Button");
contentPane.add(addBtn, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 0, 0));
//---- remBtn ----
remBtn.setText("rem Button");
contentPane.add(remBtn, new GridBagConstraints(1, 3, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 0, 0));
因此它给出:
问候弗洛里安
编辑:这是来自IDE的屏幕截图,按钮之间有额外的空格:
关于java - Java GridBag布局无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11225511/