Java 使用GridBagLayout修剪JTable下方的列空间

Java 使用GridBagLayout修剪JTable下方的列空间,java,swing,layout-manager,gridbaglayout,Java,Swing,Layout Manager,Gridbaglayout,我桌子下面有两个按钮。但是一个按钮几乎占据了我桌子上的所有空间。我想修剪两个按钮之间的列间距。将weight.x=1添加到我的左侧按钮不会向右推动 gbc.anchor = GridBagConstraints.FIRST_LINE_START; gbc.insets = new Insets(20, 10, 0, 0); gbc.gridx = 0; gbc.gridy = 0; JTable tbl = new JTable(); tbl.setPreferredScrollableView

我桌子下面有两个按钮。但是一个按钮几乎占据了我桌子上的所有空间。我想修剪两个按钮之间的列间距。将
weight.x=1
添加到我的左侧按钮不会向右推动

gbc.anchor = GridBagConstraints.FIRST_LINE_START;
gbc.insets = new Insets(20, 10, 0, 0);
gbc.gridx = 0;
gbc.gridy = 0;
JTable tbl = new JTable();
tbl.setPreferredScrollableViewportSize(new Dimension(500, 200));
tbl.setRowHeight(30);

JScrollPane pane = new JScrollPane(tbl);
panelCenter.add(pane, gbc);

gbc.anchor = GridBagConstraints.FIRST_LINE_START;
gbc.gridx = 0;
gbc.gridy = 1;
JButton btnAdd = new JButton("Add");
panelCenter.add(btnAdd, gbc);

gbc.gridx = 1;
gbc.gridy = 1;
gbc.weightx = 1;
gbc.weighty = 1;
JButton btnRemove = new JButton("Remove");
panelCenter.add(btnRemove, gbc);
输出:

与保存JTable的JScrollPane一起使用的GridBagConstraints应该将其gridwidth属性设置为2,以允许JTable占用两列,而其他所有内容都应该使用gridwidth 1

gbc.anchor = GridBagConstraints.FIRST_LINE_START;
gbc.insets = new Insets(20, 10, 0, 0);
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 2;  // ****** add
JTable tbl = new JTable();

// .....

gbc.gridwidth = 1;  // ****** add

注意:我通常为我添加的每个项目创建一个新的GridBagConstraint对象(除非我添加的是真正的项目网格),或者使用实用程序方法创建一个对象,以避免属性传播错误。

您应该将
gbc.anchor
更改为
GridBagConstraints.LINE\u END
。这会将“添加”按钮放在“删除”按钮旁边…

gridwidth
修复了我的问题。你能举个例子,比如属性传播错误吗?仍然没有遇到这种情况。@francisunox:如果不调用
gbc.gridwidth=1,就会出现错误。现在,所有组件都将以2的gridwidth添加。我知道哪里出错了。我只需要创建一个实用方法,这样它们就不能共享同一个gbc。我感谢你的帮助和提示!