如何使用 jFace 的 CheckBoxTableViewer class 的 setAllChecked(boolean) 方法?
how to use setAllChecked(boolean) method of CheckBoxTableViewer class of jFace?
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 );
}
谁能举出上述案例的例子?开始时,应检查 table 的所有项目。
我在 table 中有大约 5 件物品。默认情况下,应检查所有项目。我将有 2 个按钮 select all , deselect all 应该分别 select 所有项目和 deselect 所有项目。
有人可以举个例子吗?
如果您使用 JFace CheckboxTableViewer
(或任何其他 JFace 查看器),您必须将 JFace 内容提供程序与标签提供程序和 setInput
称呼。
您必须 而不是 像您正在做的那样创建 TableItem
s - JFace 代码不会知道这些项目,并且您的代码会出现错误。当您使用 JFace 查看器时,您 永远不会 操纵底层 table 或树项目。
您似乎有一个列表 ind
,它可以用作查看器的输入,因此您可以执行如下操作:
tableViewer.setContentProvider(ArrayContentProvider.getInstance());
tableViewer.setLabelProvider(new LabelProvider());
tableViewer.setInput(ind);
(并删除所有创建 TableItem
的代码)
ArrayContentProvider
可以处理数组或实现了 List
接口的输入。
使用提供程序正确设置 table 后,setAllChecked
方法将起作用。
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 );
}
谁能举出上述案例的例子?开始时,应检查 table 的所有项目。
我在 table 中有大约 5 件物品。默认情况下,应检查所有项目。我将有 2 个按钮 select all , deselect all 应该分别 select 所有项目和 deselect 所有项目。
有人可以举个例子吗?
如果您使用 JFace CheckboxTableViewer
(或任何其他 JFace 查看器),您必须将 JFace 内容提供程序与标签提供程序和 setInput
称呼。
您必须 而不是 像您正在做的那样创建 TableItem
s - JFace 代码不会知道这些项目,并且您的代码会出现错误。当您使用 JFace 查看器时,您 永远不会 操纵底层 table 或树项目。
您似乎有一个列表 ind
,它可以用作查看器的输入,因此您可以执行如下操作:
tableViewer.setContentProvider(ArrayContentProvider.getInstance());
tableViewer.setLabelProvider(new LabelProvider());
tableViewer.setInput(ind);
(并删除所有创建 TableItem
的代码)
ArrayContentProvider
可以处理数组或实现了 List
接口的输入。
使用提供程序正确设置 table 后,setAllChecked
方法将起作用。