我希望使用 org.eclipse.swt.widgets.List 只是为了呈现一些数据。不应允许用户选择任何项目。
我可以:
List list = new List(this, SWT.V_SCROLL);
list.setEnabled(false);
但随后我将失去滚动功能。我怎样才能使列表项无法选择?
另一种选择是使用 aTable
代替List
并禁用选择绘画,如下所示:
table.addListener(SWT.EraseItem, new Listener() {
@Override
public void handleEvent(Event event) {
event.detail &= ~SWT.SELECTED;
event.detail &= ~SWT.HOT;
}
});
每次用户选择一个项目时,您都可以尝试清除选择。不过,选择将在短时间内可见。
list.addListener(SWT.Selection, new Listener() {
@Override
public void handleEvent(Event event) {
list.setSelection(new String[0]);
}
});
如果您不喜欢我清除选择的其他答案,您可以尝试禁用列表,但在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();
}
箭头键和向上/向下翻页不起作用,因此您必须注册按键侦听器并使用键盘实现滚动。