我认为您正在寻找的是 SWT List
。你可以像这样使用它:
import java.util.ArrayList;
import java.util.Arrays;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
public class MiniExample {
public static void main(String[] args) {
Display display = Display.getDefault();
final Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));
// Fill your ArrayList with its content
ArrayList<String> printer = new ArrayList<String>();
printer.add("Epson");
printer.add("Canon");
printer.add("HP");
final List printerList = new List(shell, SWT.MULTI | SWT.BORDER);
// Fill the ArrayList into the SWT List
for(String print : printer)
printerList.add(print);
// Print selection
printerList.addListener(SWT.Selection, new Listener() {
@Override
public void handleEvent(Event arg0) {
if(printerList.getSelectionCount() > 0)
System.out.println(Arrays.toString(printerList.getSelection()));
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
}
由于您在之前的问题中已经使用过 JFace 查看器,因此我建议您ListViewer
也在这里使用。
注意:
既然你已经熟悉了TableViewer
,为什么不使用只有一列的setHeaderVisible(false)
和SWT.MULTI
作为样式呢?它基本上具有相同的效果。