我遇到一个问题,我有一个JTable布局使用的GridBagLayout管理器和表中的行是不固定的数量。我打算填充指定给表格的空间及其所有单元格,但表格的最后一行与容器中的下一个组件之间存在大的空白(和白色)空间。动态改变JTable中单元格的高度与GridBagLayout的
作为潜在的解决方案,我不知道是否可以调整单元格的高度,以填补分配给该表的空间。例如,如果有三排,那么空间的高度应该平均分为三排。如果只有一行,那么这行应占用整个可用空间。
任何建议,欢迎,如果有更好的方式来达到预期的效果,请赐教。谢谢。
P.S.我在JPanel中使用JTable而不是JScrollPane,如果这有什么区别的话。
编辑:所以我尝试下面的代码,这当然调整根据目前的行数行的高度,但最后一行之后,下一个组件之前,它仍然留下一个空白空间。想知道为什么?
// re-size the header and row height to fill the whole tPanel
int panelHeight = tPanel.getHeight();
int desiredRowHeight = panelHeight/(numOfRows + 1);
friendsInfo.getTableHeader().setPreferredSize(new Dimension(table.getColumnModel().getTotalColumnWidth(), desiredRowHeight));
table.setRowHeight(desiredRowHeight);
谢谢博罗,所以我试着打电话jPanel.getHeight(),但它返回0,所以我不能进行下一个步骤......有什么理由? – skyork 2011-05-05 20:47:15
@skyork它可能会返回零,但在开始,因为它没有放在父组件。但您可以在开始时调用[panel.getPreferredSize().getHeight()](http://download.oracle.com/javase/1.5.0/docs/api/javax/swing/JComponent.html#getPreferredSize()) 。之后,您应该使用[getHeight()](http://download.oracle.com/javase/1.5.0/docs/api/javax/swing/JComponent.html#getHeight()),因为您在当前大小之后。如果它仍然模糊,请在Java文档中检查这些方法的描述。 – Boro 2011-05-05 20:58:40
@skyork(http://stackoverflow.com/questions/5840075/java-jscrollpane-multiple-components/5842383#5842383)使用了setPreferredSize()的示例]你可能需要在开始强迫你的面板要更大一些,然后其子女的首选大小。我在哪里使用它来使滚动窗格有意地变小,以便显示滚动条。 – Boro 2011-05-05 21:03:16