当前位置: 首页 > 知识库问答 >
问题:

断言失败:未知的列布局数据

范振海
2023-03-14

当我在EclipseSWT中使用TableViewer创建组合框时,特别是只有第三列。

到目前为止,我认为我做的一切都很好,但是当我编译代码时,我发现错误:

代码:

public void createPartControl(Composite parent) {

    Composite tableComposite = new Composite(parent, SWT.NONE);
    tableColumnLayout = new TableColumnLayout();
    tableComposite.setLayout(tableColumnLayout);
    tableComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,
            true));

    tableViewer = new TableViewer(tableComposite, SWT.MULTI | SWT.H_SCROLL
            | SWT.V_SCROLL);
    tableViewer.setContentProvider(ArrayContentProvider.getInstance());
    // TODO viewer.setLabelProvider(new ViewLabelProvider());
    table = tableViewer.getTable();
    // Table table = tableViewer.getTable();
    table.setHeaderVisible(true);
    table.setLinesVisible(true);

    String[] titles = { "Threat Name", "Category Name", "Status",
            "Priority", "Description", "Justification" };
     int[] bounds = { 100, 100, 100, 100 };
    TableViewerColumn col = createTableViewerColumn(titles[2], bounds[2], 2);
    col.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            Dummy p = (Dummy) element;
            return p.getValue();
        }
    });
    col.setEditingSupport(new FirstValueEditingSupport(tableViewer));

}


private SelectionAdapter getSelectionAdapter(final TableColumn column,
        final int index) {
    SelectionAdapter selectionAdapter = new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            tableViewer.refresh();
        }
    };
    return selectionAdapter;
}

private static class Dummy {
    public String value;

    public Dummy(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}

public static class FirstValueEditingSupport extends EditingSupport {

    private final TableViewer viewer;
    private final CellEditor editor;

    private final String[] possibleValues = { "Mitigated",
            "Not Applicable", "Not Started", "Needs Investigation" };

    public FirstValueEditingSupport(TableViewer viewer) {
        super(viewer);
        this.viewer = viewer;
        this.editor = new ComboBoxCellEditor(viewer.getTable(),
                possibleValues);
    }

    @Override
    protected CellEditor getCellEditor(Object element) {
        return editor;
    }

    @Override
    protected boolean canEdit(Object element) {
        return true;
    }

    @Override
    protected Object getValue(Object element) {
        Dummy dummy = (Dummy) element;

        int index = 0;

        for (int i = 0; i < possibleValues.length; i++) {
            if (Objects.equals(possibleValues[i], dummy.getValue())) {
                index = i;
                break;
            }
        }

        return index;
    }

    @Override
    protected void setValue(Object element, Object value) {
        Dummy dummy = (Dummy) element;

        int index = (Integer) value;

        dummy.setValue(possibleValues[index]);

        viewer.update(element, null);
    }
}

private void fillRows(String shortdesc, String categ, String descp) {
    System.out.println("fillRows call from above method.");
    TableColumn status_Name_Col = tableViewer.getTable().getColumn(2);
    System.out.println("**************** status_Name_Col ************ "
            + status_Name_Col);

    tableViewer
            .addSelectionChangedListener(new ISelectionChangedListener() {
                @Override
                public void selectionChanged(
                        SelectionChangedEvent selectionChangedEvent) {
                    StructuredSelection selection = (StructuredSelection) selectionChangedEvent
                            .getSelection();
                    System.out.println(((Dummy) selection.getFirstElement())
                            .getValue());
                }
            });

    List<Dummy> elements = new ArrayList<>();
    for (int i = 0; i < Connection.Number_Of_Connection; i++) {
        elements.add(new Dummy("First option"));
    }
    tableViewer.setInput(elements);
    tableColumnLayout.setColumnData(status_Name_Col, new ColumnWeightData(
            1, true));
    tableViewerColumn.setEditingSupport(new FirstValueEditingSupport(
            tableViewer));
}

问题:如何仅在一列中显示组合框?

共有1个答案

东郭凯捷
2023-03-14

在设置完表上的所有内容之前,不能执行TableViewersetInput调用。所有的内容提供程序,标签提供程序,列布局,编辑支持,...必须设置之前setInput被调用。

您还必须为创建的每一列调用setColumnData

 类似资料:
  • 我是JMeter和断言概念的新手。当我试图执行一个JMX文件(包含JMeter中的断言)时,遇到了以下错误消息: 断言错误:错误断言失败:真断言失败消息:测试失败:变量(搜索结果)不相等/接收:找不到[[[]]]]比较:找不到[[[]]]]] 脚本的执行方式如下:$java-jar./apache-jmeter-2.10/bin/apachejmeter.jar-t./jmeter-master/

  • 我在flutter上使用firebase做了一个简单的婴儿名字项目,在成功完成教程后,该应用程序出现了这样的错误:“package:firebase_demo/main.dart':Failed assertion:line 86 pos 16:'map['votes]!=null':is not true。” 同样的帮助。

  • 问题内容: 我正在学习Xcode中的视图调试器,并通过 Debug > View Debugging> Capture View Hierarchy捕获视图层次结构 。但是,当我在应用程序中尝试该操作时,出现以下错误: -[UITextView _firstBaselineOffsetFromTop],/ BuildRoot / Library / Caches / com.apple.xbs /

  • 假设我有一个直接转换db表的case类,在创建新行时将随机生成id。 现在查看这些测试,我需要从测试中检索一行,并将其与 但是我没有第一个参数,因为它是随机创建的,我想以某种方式忽略它... 我试过了 但这是无效的。 有什么方法可以在Scala中忽略case类参数吗? 谢谢

  • 我正在使用JUnit自动化功能测试。我遇到了一个问题:如果我遵循规则“每个测试方法一个(重要的)断言”,那么每个测试用例最终会有一堆6行测试方法(17个是迄今为止最大的数字)。如果我将它们全部放入一个测试方法中,我必须注释掉失败的断言,否则一半的测试永远不会启动。 我不喜欢第一种方式,因为它启动浏览器的次数太多,而且浏览器启动登录/注销似乎比测试运行本身更“昂贵”和耗时。 第二种方法也不好,因为它

  • 我在单元测试中使用groovy脚本。我有以下代码片段,我在单个测试脚本中使用多个断言。 第一个断言失败并停止执行。但我想继续进一步的代码片段。 与selenium中的软断言类似,我应该如何收集groovy中的所有失败异常。