【问题标题】:how to set desired selection in comboviewer programatically如何以编程方式在组合查看器中设置所需的选择
【发布时间】:2014-07-16 16:00:19
【问题描述】:

我想以编程方式为 ComboViewer 设置一个值。我正在尝试从对象中获取值并以这种方式使用 setSelection(Iselection) 设置它 viewer.setSelection(new StructuredSelection(Object) ,但 ComboViewer Selection 上的值未更新。任何人都可以帮助我如何以编程方式设置 ComboViewer 的选择?

【问题讨论】:

  • @wastl 我尝试使用 setSelection(new StructuredSelection(Object)),以便在查看器上设置我想要的对象。我试图设置的对象在 ComboViewer 上可用。这是我做的正确方式吗,如果我错了,请纠正我

标签: java data-binding swt jface


【解决方案1】:
public enum CarType {
    SUV, MPV, Hatchback, Sedan;
}

// ...
cv = new ComboViewer(aComposite);
cv.setContentProvider(ArrayContentProvider.getInstance());
cv.setInput(CarType.values());

//THE BELOW LINE HAVE WHAT YOU WANT
final ISelection defaultValue = new StructuredSelection(CarType.Sedan);
cv.setSelection(defaultValue);

【讨论】:

    【解决方案2】:
    // set up comboViewer
    comboViewer = new ComboViewer(leftSectionComposite, SWT.READ_ONLY);
    comboViewer.setContentProvider(new ArrayContentProvider().getInstance());
    comboViewer.setLabelProvider(new LabelProvider() {
                @Override
                public String getText(Object element) {
                    if (element instanceof OwnerClass)
    
                                  return ((OwnerClass)element).getName();
                 return super.getText(element);
                }
            });); 
    
    comboViewer.setInput(getService().getOwnerClass());
    
    
    Person p = (Person)selection.getFirstElement();
    final ISelection selection = new StructuredSelection(p.getOwnerClassObj().getName());
    
    comboViewer.setSelection(selection);
    

    【讨论】:

    • 看起来您正在将选择设置为所有者类的 name,但组合查看器中的对象本身就是所有者类,而不是字符串。
    • @AlexeyRomanov 是的,但是在标签提供商中,我将它们作为名称发送
    • 所以您总是希望显示第一个元素?这是正确的代码吗?因为在定义它之前,它不应该像您使用选择那样编译。
    • @suj 不,您将它们显示为名称。实际内容是内容提供者返回的对象,这就是您应该传递给选择的对象。
    • @AlexeyRomanov 我什至尝试过传入实际的对象列表,但它不起作用。
    【解决方案3】:

    我最近这样做了。您需要关注组合中设置的值是否与您设置的值匹配。尝试打印它们或单步执行。

    这是需要做的——

    // set up comboViewer
    comboViewer = new ComboViewer(leftSectionComposite, SWT.READ_ONLY);
    comboViewer.setContentProvider(new ArrayContentProvider());
    comboViewer.setLabelProvider(new LabelProvider()); // Use your label provider if possible.
    comboViewer.setInput(YOURVALUES);
    
    // set value
    
    final ISelection selection = new StructuredSelection(valueFromComboThatYouWantToSet);
    comboViewer.setSelection(selection);
    

    【讨论】:

    • @ND27:我已经通过了,它仍然无法正常工作。我尝试设置的值和查看器输入列表中的值都相同,但它仍然不起作用
    • 分享您的代码..您的标签提供者和您正在设置的值
    • 我已经分享了我的答案,请验证。谢谢
    • 最好使用 ArrayContentProvider.getInstance() 而不是 new ArrayContentProvider()
    猜你喜欢
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2010-09-29
    • 2012-02-15
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多