我想要一个具有组合的表作为其列标题之一。我已经从这个问题中发现Table是不可能的:列标题SWT中的控件(组合,广播,文本)
有办法解决吗?我尝试了TableViewer,但也没有找到使用它的方法。有什么办法可以实现?
您可以Composite
使用常规控件在表格上方的区域中创建自己的列标题。
然后,您需要调整这些控件的大小以匹配表列的大小。一种方法是使用表布局类扩展jfaceTableColumnLayout
并覆盖setColumnWidths
每次列大小更改时调用的方法,因此您可以调整标题控件的宽度。
注意:TableColumnLayout需要Composite
仅在上包含,Table
而不是直接在上Table
。
所以这样的布局:
/**
* Table column layout extended to manage a separate table header.
*/
public class TableColumnLayoutWithSeparateHeader extends TableColumnLayout
{
/** Header composite */
private final Composite _headerComposite;
/** Right margin adjust */
private final int _rightMargin;
/**
* Constructor.
*
* @param headerComposite Header composite
* @param rightMargin Right margin value
*/
public TableColumnLayoutWithSeparateHeader(final Composite headerComposite, final int rightMargin)
{
super();
_headerComposite = headerComposite;
_rightMargin = rightMargin;
}
/**
* {@inheritDoc}
* @see org.eclipse.jface.layout.TableColumnLayout#setColumnWidths(org.eclipse.swt.widgets.Scrollable, int[])
*/
@Override
protected void setColumnWidths(final Scrollable tableTree, final int [] widths)
{
super.setColumnWidths(tableTree, widths);
// Update the header composite
final Control [] children = _headerComposite.getChildren();
final int size = Math.min(widths.length, children.length);
for (int index = 0; index < size; ++index) {
final GridData data = (GridData)children[index].getLayoutData();
int width = widths[index];
if (index == (size - 1))
width -= _rightMargin;
data.widthHint = width;
}
_headerComposite.layout();
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句