有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaSWT列表使其不可选择

我希望使用org。日食swt。小部件。只列出一些数据。不应允许用户选择任何项目

我可以:

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

但我会失去滚动功能。如何使列表项不可选择


共 (3) 个答案

  1. # 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();
    }
    

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

  2. # 2 楼答案

    另一种选择是使用Table而不是List,并禁用如下选择绘制:

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

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

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