如何冻结JTable
中的行?
这应类似于Microsoft Excel的工作方式,在Microsoft Excel中,用户可以选择一个单元格并右键单击并冻结/取消冻结行。我发现有关冻结列而不是行的很多答案。
谢谢!
简短的答案是,您需要有两个JScrollPanes:最上面的一个用于处理冻结的行(带有一个行标题来处理其冻结的列),最下面的一个用于可滚动的行(也带有rowheader)-这样就结束了最多可以管理4个表。不要在顶部滚动窗格中使用滚动条:而是在下部滚动窗格的视口中添加一个ChangeListener()如下所示:
public void stateChanged(ChangeEvent e) {
Point p = spMain.getViewport().getViewPosition();
p.y = 0;
spHead.getViewport().setViewPosition(p);
}
底部窗格的TableHeader需要隐藏(至少在显示顶部窗格时:)
spMain.setColumnHeaderView(bodyTable.getTableHeader());
spMain.getColumnHeader().setVisible(false);
[其余部分并非一帆风顺,但是如果您没有生成的行号列来模拟Excel,则可以使您的生活更加轻松,不要冻结已经冻结的表(您不能这样做)在Excel中),并且不允许排序(至少冻结部分中的列)。我使用的JVM具有一个“功能”,该功能使将顶部窗格中的标题与底部窗格中的列对齐变得复杂,直到顶部表中至少有一行为止-一旦实际执行了“冻结”,请考虑仅使用顶部窗格。