添加JScrollPane后,JTable不会显示

时间:2014-01-03 20:08:47

标签: java swing jtable jscrollpane

这是我的代码:

table = new JTable(tableModel);
final TableRowSorter<TableModel> sorter = new TableRowSorter(tableModel);
table.setRowSorter(sorter);
table.setBounds(122, 47, 162, 204);

JScrollPane scroller = new JScrollPane(table);
frame.getContentPane().add(scroller);

在我添加JScrollPane之前,它工作正常。现在它是空白的。我在这做错了什么?如果您还有其他需要,请告诉我。

1 个答案:

答案 0 :(得分:1)

正如@HovercraftFullOfEels明智地指出调用Component.setBounds()搞砸了事情:

  

public void setBounds(int x, int y, int width, int height)

     

移动并调整此组件的大小。左上角的新位置   角由xy指定,新尺寸由width指定   和height

     

此方法更改与布局相关的信息,因此,   使组件层次结构无效。

通常,您不应该调用此方法,而应使用适当的LayoutManager来代替管理组件大小和定位。请查看Using Layout ManagersA Visual Guide to Layout Managers以获取更多信息。

如果您需要为表格提供默认尺寸,则可以考虑使用JTable.setPreferredScrollableViewportSize()方法,但请始终牢记此主题:Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?

特别是在这种情况下,如果你的框架只包含滚动窗格,那么这个顺序应该足够了:

JScrollPane scroller = new JScrollPane(table);
frame.getContentPane().add(scroller);
frame.pack();

因为框架的内容窗格已经有一个默认的布局管理器:BorderLayout。最后不要忘记调用frame.pack()方法。