2017-06-16 28 views
1

我的表格下方有两个按钮。但是一个按钮几乎占据了我桌子的所有空间。我想修剪两个按钮之间的列空间。将weight.x = 1添加到我的左侧按钮不会向右推。使用GridBagLayout修剪JTable下方的列空间

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); 

输出: SC

回答

3

与JScrollPane的持有JTable中应有gridwidth属性设置为2,让JTable中占据两列使用的GridBagConstraints对象,而其他一切应该使用的1 gridwidth 。谨慎的

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对象,或者使用一个实用的方法来创建一个,在邻避免财产传播错误。

+0

'gridwidth'解决了我的问题。你能举例如属性传播错误吗?还没遇到那个。 – Francisunoxx

+0

@Francisunoxx:如果在使用相同的gbc变量和对象时添加JScrollPane后未调用'gbc.gridwidth = 1;',则会发生此错误。现在所有组件都将以2的网格宽度添加。 –

+0

我看到我出错的地方。我只需要创建一个实用程序方法,以便它们不能共享相同的gbc。我感谢您的帮助和提示! – Francisunoxx

0

您应该将gbc.anchor更改为GridBagConstraints.LINE_END。这将把你的“添加”按钮旁边的“删除”按钮...