JFace TableViewer获得可见的列宽

时间:2015-10-26 16:34:02

标签: java swt scrollbar jface tableviewer

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

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

有什么办法吗?

1 个答案:

答案 0 :(得分:2)

您需要查询基础Tableviewer.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.getgetColumnOrder()