JFace TableViewer 获取可见列宽

JFace TableViewer get visible column width

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

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

有什么办法吗?

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

如果您使用 TableViewerColumns 定义查看者列,则也可以通过 viewerColumn.getColumn().

访问这些列

要确定最右边的可见列,您可以使用 table 的客户区 (Table#getClientArea().width) 的宽度,它为您提供了总可用 space 来显示列。

每列的宽度为 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;
}

请注意,如果列可以重新排序,您需要通过 table.getColumnOrder()

确定实际的 columnIndex