JFace TableViewer获取可见列宽度



我有一个TableViewer水平滚动条。移动滚动条或调整窗口大小可以隐藏或显示某些列。

我想知道某个列在滚动后是否可见,如果是,它的确切宽度是可见的。

有办法吗?

需要查询底层的Table (viewer.getTable())及其TableColumn s (table.getColumns())来解决这个问题。

如果您使用TableViewerColumn定义查看器列,那么这些列也可以通过viewerColumn.getColumn()访问。

要确定最右边的可见列,您可以使用表的clientArea (Table#getClientArea().width)的宽度,它为您提供了显示列的总可用空间。

每列的宽度为TableColumn.getWidth()。添加所需列左侧的所有列的宽度,将使您能够确定它是否可见。

table.getHorizontalBar().getSelection()给出行的水平偏移量。当减去这个偏移量时,您应该能够确定给定的列是否可见。

结果代码看起来像这样:
boolean isColumnVisible(Table table, int columnIndex) {
  int columnRight = 0;
  for( int i = 0; i <= columnIndex; i++ ) {
    columnRight += table.getColumn(i).getWidth();
  }
  int clientAreaWidth = table.getClientArea().width;
  int horizontalOffset = table.getHorizontalBar().getSelection();
  return columnRight - horizontalOffset <= clientAreaWidth;
}

注意,如果列可以重新排序,则需要确定实际的columnIndextable.getColumnOrder()

最新更新