带组合框和复选框的 SWT TreeViewer
SWT TreeViewer with combobox and checkbox
我正在寻找一种方法来在 table/grid 的第一列中显示一棵树,同时显示其他三列,其中一列带有组合框,另一列带有复选框。我一直在尝试使用 TreeViewer 来完成这项工作,但它不太符合我的要求。这棵树很好地结合在一起。 Combobox 列,我在该列中使用了 EditorSupport 并在 getCellEditor 方法中使用了 return ComboboxCellEditor,但是当您 select 该列中的单元格时,您只能看到该列中有一个组合框。然后,当您单击单元格外时,selected 值将恢复为默认空白。复选框列也是如此,只有当单元格被 selected 时才可见。我正在寻找可以显示我的树的东西,组合框列和复选框列始终可见。我看过 TableViewer,但找不到在第一列中强制插入树的方法。我看过 Nebula Grid,但它看起来并不支持组合框。关于如何使其中之一像我正在寻找的那样工作的任何提示,或者是否有其他树/table/grid 我应该查看。谢谢
编辑:这是 EditingSupport 的代码 class。
private class ComboBoxEditingSupport extends EditingSupport
{
private ComboBoxCellEditor cellEditor;
public ComboBoxEditingSupport(ColumnViewer viewer)
{
super(viewer);
cellEditor =
new ComboBoxCellEditor(((TreeViewer) viewer).getTree(),
new String[] {
"Some String",
"Some other String" }, SWT.READ_ONLY);
}
@Override
protected CellEditor getCellEditor(Object element)
{
if (element instanceof MyObject
{
return cellEditor;
}
return null;
}
@Override
protected boolean canEdit(Object element)
{
if (element instanceof MyObject
{
return true;
}
return false;
}
@Override
protected Object getValue(Object element)
{
return 0;
}
@Override
protected void setValue(Object element, Object value)
{
TreeItem[] ti = treeViewer.getTree().getSelection();
CCombo combo = ((CCombo) cellEditor.getControl());
String str = combo.getItem(combo.getSelectionIndex());
ti[0].setText(1, str);
}
}
您的 setValue
方法必须更新您的模型数据(您的内容提供商返回的数据)中的值。 setValue
的 element
参数是您应该更新的特定模型数据对象 (MyObject
)。
更新值调用后:
getViewer().update(element, null);
获取树以更新模型的显示。
尝试直接更新 TreeItem
是行不通的。
我正在寻找一种方法来在 table/grid 的第一列中显示一棵树,同时显示其他三列,其中一列带有组合框,另一列带有复选框。我一直在尝试使用 TreeViewer 来完成这项工作,但它不太符合我的要求。这棵树很好地结合在一起。 Combobox 列,我在该列中使用了 EditorSupport 并在 getCellEditor 方法中使用了 return ComboboxCellEditor,但是当您 select 该列中的单元格时,您只能看到该列中有一个组合框。然后,当您单击单元格外时,selected 值将恢复为默认空白。复选框列也是如此,只有当单元格被 selected 时才可见。我正在寻找可以显示我的树的东西,组合框列和复选框列始终可见。我看过 TableViewer,但找不到在第一列中强制插入树的方法。我看过 Nebula Grid,但它看起来并不支持组合框。关于如何使其中之一像我正在寻找的那样工作的任何提示,或者是否有其他树/table/grid 我应该查看。谢谢
编辑:这是 EditingSupport 的代码 class。
private class ComboBoxEditingSupport extends EditingSupport
{
private ComboBoxCellEditor cellEditor;
public ComboBoxEditingSupport(ColumnViewer viewer)
{
super(viewer);
cellEditor =
new ComboBoxCellEditor(((TreeViewer) viewer).getTree(),
new String[] {
"Some String",
"Some other String" }, SWT.READ_ONLY);
}
@Override
protected CellEditor getCellEditor(Object element)
{
if (element instanceof MyObject
{
return cellEditor;
}
return null;
}
@Override
protected boolean canEdit(Object element)
{
if (element instanceof MyObject
{
return true;
}
return false;
}
@Override
protected Object getValue(Object element)
{
return 0;
}
@Override
protected void setValue(Object element, Object value)
{
TreeItem[] ti = treeViewer.getTree().getSelection();
CCombo combo = ((CCombo) cellEditor.getControl());
String str = combo.getItem(combo.getSelectionIndex());
ti[0].setText(1, str);
}
}
您的 setValue
方法必须更新您的模型数据(您的内容提供商返回的数据)中的值。 setValue
的 element
参数是您应该更新的特定模型数据对象 (MyObject
)。
更新值调用后:
getViewer().update(element, null);
获取树以更新模型的显示。
尝试直接更新 TreeItem
是行不通的。