我想要一个将组合作为其列标题之一的表。我已经从这个问题中发现使用 Table 是不可能的: Controls (Combo, Radio, Text) in column header SWT
有办法解决吗?我尝试了 TableViewer,但也没有找到解决方法。有什么办法可以实现吗?
我想要一个将组合作为其列标题之一的表。我已经从这个问题中发现使用 Table 是不可能的: Controls (Combo, Radio, Text) in column header SWT
有办法解决吗?我尝试了 TableViewer,但也没有找到解决方法。有什么办法可以实现吗?
Composite
您可以使用普通控件在表格上方创建自己的列标题。
然后,您需要调整这些控件的大小以匹配表格列的大小。一种方法是使用扩展 jface 的表格布局类TableColumnLayout
并覆盖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();
}
}