1
private ArrayList<PrinterProfile> printersList = null;
private ArrayList<PrinterProfile> printers = null;    

...

void Method() {
    ...
    printers = (ArrayList<PrinterProfile>) listOp.getPrinters();
    printersList.setListData(printers.toArray(new PrinterProfile[0]));
}

setListData仅适用于JList但我正在使用 SWT 和ArrayList

4

1 回答 1

2

我认为您正在寻找的是 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作为样式呢?它基本上具有相同的效果。

于 2012-09-06T19:47:30.773 回答