【问题标题】:JFace TableViewer get visible column widthJFace TableViewer 获得可见的列宽
【发布时间】:2016-01-25 20:36:57
【问题描述】:

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

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

有什么办法吗?

【问题讨论】:

    标签: java swt scrollbar jface tableviewer


    【解决方案1】:

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

    如果您使用TableViewerColumns 定义了查看器列,则也可以通过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()

    【讨论】:

    • 非常详细的答案!我只需要偏移量,因为我的列位于索引 0。非常感谢。
    猜你喜欢
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    相关资源
    最近更新 更多