データを表示するためだけに org.eclipse.swt.widgets.List を使用したいと考えています。ユーザーが項目を選択できないようにする必要があります。
私はただ:
List list = new List(this, SWT.V_SCROLL);
list.setEnabled(false);
しかし、スクロール機能が失われます。リスト項目を選択できないようにするにはどうすればよいですか?
別の方法として、Table
代わりにa を使用し、次のList
ように選択ペインティングを無効にすることもできます。
table.addListener(SWT.EraseItem, new Listener() {
@Override
public void handleEvent(Event event) {
event.detail &= ~SWT.SELECTED;
event.detail &= ~SWT.HOT;
}
});
選択をクリアする私の他の回答が気に入らない場合は、リストを無効のままにしてみてください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();
}
矢印キーとページアップ/ダウンダウンは機能しないため、キーリスナーを登録し、キーボードによるスクロールを実装する必要があります。
ユーザーがアイテムを選択するたびに、選択をクリアしようとすることができます。ただし、選択は短い時間間隔で表示されます。
list.addListener(SWT.Selection, new Listener() {
@Override
public void handleEvent(Event event) {
list.setSelection(new String[0]);
}
});