首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TableViewer选择更改

TableViewer选择更改
EN

Stack Overflow用户
提问于 2012-12-07 18:16:24
回答 1查看 3.3K关注 0票数 2

我有点小问题,我在寻求帮助。

我在我的主部件中有一个TableViewer,并且有很多条目在快速更新。我的详细信息页面显示所选项目信息。我想让这个细节页面持久,只有当选择发生变化时才会得到通知。

我面临的问题是,当一个新项目被添加到tableviewer中时,选择会自动改变。

编辑:我有一个处理程序,它更新TableViewer,在我的TableViewer的输入列表的开头添加一个新项目。

TableViewerSWT.VIRTUAL时,所选内容在索引上,当添加项目时,所选行是相同的,但项目已经移动。

TableViewer不是SWT.VIRTUAL时,选择发生在对象上,但性能非常低!

有什么建议吗?谢谢

代码语言:javascript
复制
public void update(Object obj_p) {
    if (obj_p instanceof IMessageEvent) {
        IMessageEvent event = (IMessageEvent) obj_p;
        synchronized (_currentListEvents) {
            _currentListEvents.addFirst(event);
            if (_currentListEvents.size() > _maxEvents) {
                _currentListEvents.removeLast();
            }
        }
    }
    if (null == obj_p) {
        synchronized (_currentListEvents) {
            _currentListEvents.clear();
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-14 19:22:20

创建TableViewer时,请使用SWT.FULL_SELECTION样式。

这里有一个简单的可运行代码。它的行为与您发布的完全一样,选择正在更改,但当您使用注释的TableViewer构造函数时,它对我有效。

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class TestCase {

private static List<String> model = new ArrayList<String>();
private static TableViewer viewer;

public static void main(String[] args) {
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());

//  viewer = new TableViewer(shell, SWT.SINGLE | SWT.FULL_SELECTION |    SWT.H_SCROLL | SWT.V_SCROLL | SWT.VIRTUAL);
    viewer = new TableViewer(shell, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.VIRTUAL);

    viewer.getTable().setHeaderVisible(true);
    viewer.getTable().setLinesVisible(true);
    viewer.setUseHashlookup(true);

    viewer.setContentProvider(ArrayContentProvider.getInstance());
    viewer.setLabelProvider(new LabelProvider());

    model.add("element2");
    model.add("element1");
    model.add("element0");

    viewer.setInput(model);

    viewer.setSelection(new StructuredSelection(model.get(1)));

    viewer.addSelectionChangedListener(new ISelectionChangedListener() {

        @Override
        public void selectionChanged(SelectionChangedEvent event) {
            System.out.println("selection changed");
        }
    });

    addContent();

    shell.setSize(400, 400);
    shell.open();

    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
}

private static void addContent() {
    Display.getCurrent().timerExec(2000, new Runnable() {

        @Override
        public void run() {
            model.add(0, "element" + model.size());
            viewer.refresh();
            addContent();
        }
    });
}

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13761052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档