JFace TableViewer 获取可见列宽
JFace TableViewer get visible column width
我有一个带水平滚动条的 TableViewer
。移动滚动条或调整大小 window 可以隐藏或显示某些列。
我想知道某个列在滚动后是否可见,如果是,它的确切可见宽度。
有什么办法吗?
您需要查询底层 Table
(viewer.getTable()
) 及其 TableColumn
s (table.getColumns()
) 来解决这个问题。
如果您使用 TableViewerColumn
s 定义查看者列,则也可以通过 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
我有一个带水平滚动条的 TableViewer
。移动滚动条或调整大小 window 可以隐藏或显示某些列。
我想知道某个列在滚动后是否可见,如果是,它的确切可见宽度。
有什么办法吗?
您需要查询底层 Table
(viewer.getTable()
) 及其 TableColumn
s (table.getColumns()
) 来解决这个问题。
如果您使用 TableViewerColumn
s 定义查看者列,则也可以通过 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