0

データを表示するためだけに org.eclipse.swt.widgets.List を使用したいと考えています。ユーザーが項目を選択できないようにする必要があります。

私はただ:

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

しかし、スクロール機能が失われます。リスト項目を選択できないようにするにはどうすればよいですか?

4

3 に答える 3

6

別の方法として、Table代わりにa を使用し、次のListように選択ペインティングを無効にすることもできます。

table.addListener(SWT.EraseItem, new Listener() {
    @Override
    public void handleEvent(Event event) {
        event.detail &= ~SWT.SELECTED;
        event.detail &= ~SWT.HOT;
    }
});
于 2013-11-06T06:53:53.863 に答える
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();
}

矢印キーとページアップ/ダウンダウンは機能しないため、キーリスナーを登録し、キーボードによるスクロールを実装する必要があります。

于 2013-11-06T06:28:04.743 に答える
1

ユーザーがアイテムを選択するたびに、選択をクリアしようとすることができます。ただし、選択は短い時間間隔で表示されます。

    list.addListener(SWT.Selection, new Listener() {
        @Override
        public void handleEvent(Event event) {
            list.setSelection(new String[0]);
        }
    });
于 2013-11-06T06:23:33.143 に答える