gpt4 book ai didi

java - 使用 swt 在列标题中组合

转载 作者:行者123 更新时间:2023-12-04 04:45:05 26 4
gpt4 key购买 nike

我想要一个将组合作为其列标题之一的表格。
我已经从这个问题中发现 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();
}
}

关于java - 使用 swt 在列标题中组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18334546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com