基本原理是,给List加一个SelectionListener,并记录上次被选中的下标,如果当前选中的Index被包含在
public static class DeselectAdapter extends SelectionAdapter {
private int singleSelected = -1;
@Override
public void widgetSelected(SelectionEvent e) {
List list = (List) e.widget;
if(singleSelected == list.getSelectionIndex()) {
list.deselect(singleSelected);
}
singleSelected = list.getSelectionIndex();
}
}
演示程序如下
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));
List list = new List(shell, SWT.MULTI|SWT.H_SCROLL|SWT.V_SCROLL);
list.setLayoutData(new GridData(GridData.FILL_BOTH));
list.setItems(new String[] {"0","1","2","3","4","5"});
list.addSelectionListener(new DeselectAdapter());
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
反选效果如下图
第一步选中0,
第二步,再次点击0,则0被取消点中了。