jFace CheckboxTableViewer和内容提供商

时间:2015-05-03 09:04:31

标签: java checkbox jface

我是jFace的新手。我使用以下TableViewer类作为示例:

public class AppPersonViewer extends TableViewer
{
    public Table table;

    public AppPersonViewer(Composite parent, int style) 
    {
        super(parent, style);
        table = getTable();
        GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
        table.setLayoutData(gridData);
        createColumns();
        table.setHeaderVisible(true);
        table.setLinesVisible(true);
        setContentProvider(new AppContentProvider());
    }

    private void createColumns()
    {
        String[] titles = { "First Name", "Second Name", "Age", "Country", "Likes SO" };
        int[] bounds = { 150, 150, 100, 150, 100 };

        TableViewerColumn column = createTableViewerColumn(titles[0], bounds[0], 0);
        column.setLabelProvider(new ColumnLabelProvider(){
            public String getText(Object element) {
                if(element instanceof Person)
                    return ((Person)element).getFirst();
                return super.getText(element);
            }
        });

        column = createTableViewerColumn(titles[1], bounds[1], 1);
        column.setLabelProvider(new ColumnLabelProvider(){
            public String getText(Object element) {
                if(element instanceof Person)
                    return ((Person)element).getSecond();
                return super.getText(element);
            }
        });

        column = createTableViewerColumn(titles[2], bounds[2], 2);
        column.setLabelProvider(new ColumnLabelProvider(){
            public String getText(Object element) {
                if(element instanceof Person)
                    return ""+((Person)element).getAge();
                return super.getText(element);
            }
        });

        column = createTableViewerColumn(titles[3], bounds[3], 3);
        column.setLabelProvider(new ColumnLabelProvider(){
            public String getText(Object element) {
                if(element instanceof Person)
                    return ((Person)element).getCountry();
                return super.getText(element);
            }
        });

        column = createTableViewerColumn(titles[4], bounds[4], 4);
        column.setLabelProvider(new ColumnLabelProvider(){
            public Image getImage(Object element) {
                    return ((Person)element).getImage();
            }

            public String getText(Object element) {
                  return null;  // no string representation, we only want to display the image
                }

        });


    }

    private TableViewerColumn createTableViewerColumn(String header, int width, int idx) 
    {
        TableViewerColumn column = new TableViewerColumn(this, SWT.LEFT, idx);
        column.getColumn().setText(header);
        column.getColumn().setWidth(width);
        column.getColumn().setResizable(true);
        column.getColumn().setMoveable(true);

        return column;
    }
}

这个例子效果很好。现在我想在每个表行的第一列中显示复选框。 (在原生SWT中,标志SWT.CHECK可以正常工作)。

经过一番搜索,我发现了CheckboxTableViewer类。所以我把示例改为:

public class AppPersonViewer extends CheckboxTableViewer
{
    public Table table;

    public AppPersonViewer(Composite parent, int style) 
    {
        super(parent, style);
        table = getTable();
        GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
        table.setLayoutData(gridData);
        createColumns();
        table.setHeaderVisible(true);
        table.setLinesVisible(true);
        setContentProvider(new AppContentProvider());
    }

  .
  .
  .

现在显示复选框,但我不知道如何使用我的内容提供商中的复选框。任何的想法?

1 个答案:

答案 0 :(得分:0)

CheckboxTableViewer使用单独的ICheckStateProvider设置复选框。

使用

设置
viewer.setCheckStateProvider(checkStateProvider);

提供商有两种方法isCheckedisGrayed

传递给这些方法的值是内容提供商提供的对象。

或者CheckboxTableViewersetCheckedsetAllChecked,...方法。