如何使用CheckBoxTableViewer类的jFace的setAllChecked(boolean)方法?

时间:2016-10-01 20:31:18

标签: java eclipse eclipse-plugin jface rcp

protected Control createDialogArea( Composite parent )
{
    Composite composite = new Composite( parent, SWT.NONE );
    composite.setLayoutData( new GridData( GridData.FILL_BOTH ) );
    composite.setLayout( new GridLayout( 2, false ) );
    Group consumedCmp = new Group( composite, SWT.BORDER );
    consumedCmp.setLayout( new GridLayout( 1, false ) );
    consumedCmp.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true, 1, 1 ) );
    consumedCmp.setText( reg.getString("ASSIGN_AS_TXT") );
    btnMsConsumed = new Button( consumedCmp, SWT.RADIO );
    btnMsConsumed.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, false, false, 1, 1 ) );
    btnMsConsumed.setText( ME_CONSUMED );
    btnRequired = new Button( consumedCmp, SWT.RADIO );
    btnRequired.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, false, false, 1, 1 ) );
    btnRequired.setText( REQUIRED );
    Group tableCmp = new Group( composite, SWT.BORDER );
    tableCmp.setLayout( new GridLayout( 1, false ) );
    tableCmp.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true, 1, 1 ) );
    tableCmp.setText( PART_ASSIGNMENT_INDICATOR );
    tableViewer = CheckboxTableViewer.newCheckList( tableCmp, SWT.CHECK | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL );
    table = tableViewer.getTable();
    table.setLinesVisible( true );
    table.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true, 1, 1 ) );
    Composite buttonCmp = new Composite( tableCmp, SWT.NONE );
    buttonCmp.setLayout( new GridLayout( 2, false ) );
    buttonCmp.setLayoutData( new GridData( SWT.FILL, SWT.FILL, false, false, 1, 1 ) );
    btnSelectAll = new Button( buttonCmp, SWT.NONE );
    btnSelectAll.setLayoutData( new GridData( SWT.RIGHT, SWT.CENTER, true, false, 1, 1 ) );
    btnSelectAll.setText( reg.getString("SELECT_ALL_TXT") );
    btnSelectAll.addListener( SWT.Selection, new Listener()
    {
        @Override
        public void handleEvent( Event event )
        {
            //tableViewer.setAllChecked( true );
            for(TableItem item : table.getItems())
                item.setChecked(true);
        }
    });
    Button btnDeselectAll = new Button( buttonCmp, SWT.NONE );
    btnDeselectAll.setLayoutData( new GridData( SWT.LEFT, SWT.CENTER, true, false, 1, 1 ) );
    btnDeselectAll.setText( reg.getString("DESELECT_ALL_TXT") );
    btnDeselectAll.addListener( SWT.Selection, new Listener()
    {
        @Override
        public void handleEvent( Event event )
        {
            //tableViewer.setAllChecked( false );
            for(TableItem item : table.getItems())
                item.setChecked(false);
        }
    });
    initTable();
    return composite;
}

private void initTable()
{
    Iterator iter = ind.iterator();
    while( iter.hasNext() )
    {
        TableItem item = new TableItem( table, SWT.NONE );
        // this code works
        item.setText( ( String ) iter.next() );
        item.setChecked(true);
    }
    // the below code doesnot works
    //tableViewer.setAllChecked( true );
}

有人可举例说明上述情况吗?首先,应检查表格的所有项目。

我在桌子上有5个项目。默认情况下,应检查所有项目。我将有2个按钮全选,取消选择所有应选择所有项目并分别取消选择所有项目。

有人可以为此举例吗?

1 个答案:

答案 0 :(得分:0)

如果您使用JFace CheckboxTableViewer(或任何其他JFace查看器),必须将JFace内容提供商与标签提供商和setInput电话一起使用。

您必须创建TableItem,就像您正在做的那样 - JFace代码不知道这些项目,您的代码会行为不当。当您使用JFace查看器时,您从不操纵基础表或树项。

您似乎有一个列表ind,可以将其用作查看器的输入,以便您执行以下操作:

tableViewer.setContentProvider(ArrayContentProvider.getInstance());

tableViewer.setLabelProvider(new LabelProvider());

tableViewer.setInput(ind);

(并删除创建TableItem s)的所有代码

ArrayContentProvider可以处理作为数组的输入或实现List接口的输入。

使用提供程序正确设置表格后,setAllChecked方法将起作用。