Java SWT列表 - 使其无法选择

时间:2013-11-05 22:08:43

标签: java swt

我希望使用org.eclipse.swt.widgets.List来呈现一些数据。不应允许用户选择任何项目。

我可以:

List list = new List(this, SWT.V_SCROLL);
list.setEnabled(false);

但是我会松开滚动功能。如何才能使列表项无法选择?

3 个答案:

答案 0 :(得分:5)

另一种方法是使用Table代替List并禁用选择绘画:

table.addListener(SWT.EraseItem, new Listener() {
    @Override
    public void handleEvent(Event event) {
        event.detail &= ~SWT.SELECTED;
        event.detail &= ~SWT.HOT;
    }
});

答案 1 :(得分:1)

每次用户选择项目时,您都可以尝试清除选择。但是,选择将在短时间内可见。

    list.addListener(SWT.Selection, new Listener() {
        @Override
        public void handleEvent(Event event) {
            list.setSelection(new String[0]);
        }
    });

答案 2 :(得分:1)

如果您不喜欢我的其他答案清除选择,您可以尝试禁用列表,但在ScrolledComposite内。它看起来会被禁用,但滚动会起作用。这是一个片段:

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

    final ScrolledComposite scrolledComposite = new ScrolledComposite(shell, SWT.H_SCROLL | SWT.V_SCROLL);
    scrolledComposite.setExpandHorizontal(true);
    scrolledComposite.setExpandVertical(true);
    scrolledComposite.setBackground(display.getSystemColor(SWT.COLOR_CYAN));
    final List list = new List(scrolledComposite, SWT.NONE);
    list.setEnabled(false);
    scrolledComposite.setContent(list);
    scrolledComposite.addListener(SWT.Resize, new Listener() {
        @Override
        public void handleEvent(Event event) {
            final Point size = list.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
            scrolledComposite.setMinSize(size);
        }
    });

    for (int i = 0; i < 1000; i++) {
        list.add(Integer.toString(i));
    }

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

箭头键和向上/向下翻页不起作用,因此您必须注册键侦听器并使用键盘实现滚动。