这是我的代码:
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之前,它工作正常。现在它是空白的。我在这做错了什么?如果您还有其他需要,请告诉我。
答案 0 :(得分:1)
正如@HovercraftFullOfEels明智地指出调用Component.setBounds()搞砸了事情:
public void setBounds(int x, int y, int width, int height)
移动并调整此组件的大小。左上角的新位置 角由
x
和y
指定,新尺寸由width
指定 和height
。此方法更改与布局相关的信息,因此, 使组件层次结构无效。
通常,您不应该调用此方法,而应使用适当的LayoutManager来代替管理组件大小和定位。请查看Using Layout Managers和A 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()方法。