如何冻结JTable中的行

问题描述 投票:0回答:1

如何冻结JTable中的行?

这应类似于Microsoft Excel的工作方式,在Microsoft Excel中,用户可以选择一个单元格并右键单击并冻结/取消冻结行。我发现有关冻结列而不是行的很多答案。

谢谢!

java swing jtable
1个回答
0
投票

简短的答案是,您需要有两个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具有一个“功能”,该功能使将顶部窗格中的标题与底部窗格中的列对齐变得复杂,直到顶部表中至少有一行为止-一旦实际执行了“冻结”,请考虑仅使用顶部窗格。

© www.soinside.com 2019 - 2024. All rights reserved.