清除 SWT-CheckboxTableViewer 的内容
Clearing the contents of SWT-CheckboxTableViewer
我已经实现了,如下所示。
我面临的问题是清除 CheckboxTableViewer 的内容,现在我正在跟踪 CheckboxTableViewer 中存在的项目,然后删除第 0 个元素,但是当用户在列出非常迅速。
list= new org.eclipse.swt.widgets.List(container, SWT.CHECK | SWT.FULL_SELECTION | SWT.VIRTUAL);
list.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
复选框代码
table = new Table(container, SWT.CHECK | SWT.FULL_SELECTION | SWT.VIRTUAL);
table.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
table.setHeaderVisible(true);
checkboxTableViewer = new CheckboxTableViewer(table);
在侦听器中,我尝试获取 table 并清除 table 但这不起作用。
checkboxTableViewer .getTable().clearAll();
请让我知道如何进行。
更新代码
package com.checkagain.importWizards;
public class PageTwo extends WizardPage {
private Text text1;
private Composite container;
org.eclipse.swt.widgets.List single;
Table table ;
CheckboxTableViewer checkboxTableViewer;
List elementList= new ArrayList();
public PageTwo() {
super("PageTwo");
setTitle("PageTwo");
setDescription("Fake Wizard: PageTwo");
elementList.add("1");
elementList.add("2");
elementList.add("3");
elementList.add("4");
elementList.add("5");
elementList.add("6");
}
@Override
public void createControl(Composite parent) {
container = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
container.setLayout(new FillLayout());
layout.numColumns = 2;
single= new org.eclipse.swt.widgets.List(container, SWT.CHECK | SWT.FULL_SELECTION | SWT.VIRTUAL);
single.add("one");
single.add("two");
single.add("three");
single.add("four");
single.add("five");
single.add("six");
//single.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
//////Code for Check Box
table = new Table(container, SWT.CHECK | SWT.FULL_SELECTION | SWT.VIRTUAL);
//table.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
table.setHeaderVisible(true);
checkboxTableViewer = new CheckboxTableViewer(table);
single.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent arg0) {
// TODO Auto-generated method stub
//additional code added on suggestion
checkboxTableViewer.setInput(new String[0]);
checkboxTableViewer.refresh();
checkboxTableViewer.add(elementList.get(single.getSelectionIndex()));
}
@Override
public void widgetDefaultSelected(SelectionEvent arg0) {
// TODO Auto-generated method stub
}
});
setControl(container);
setPageComplete(true);
}
public String getText1() {
return text1.getText();
}
}
当您使用 JFace table 查看器时,您应该避免访问底层 Table - table 查看器会管理它。
您还指定了 SWT.VIRTUAL
标志 - tables 与此标志的行为非常不同,它仅对大 tables 有用。
您可以清除查看器,方法是使用 setInput
将 table 查看器输入设置为空数组,或者将您的内容提供程序 return 设为空元素数组并调用 refresh
- 一个简单的例子:
CheckboxTableViewer checkboxTableViewer = CheckboxTableViewer.newCheckList(shell, SWT.FULL_SELECTION | SWT.BORDER);
checkboxTableViewer.setContentProvider(ArrayContentProvider.getInstance());
checkboxTableViewer.setLabelProvider(new LabelProvider());
final List<String> input = new ArrayList<>();
input.add("entry 1");
input.add("entry 2");
input.add("entry 3");
checkboxTableViewer.setInput(input);
Button clear = new Button(shell, SWT.PUSH);
clear.setText("Clear");
clear.addListener(SWT.Selection, event ->
{
input.clear();
checkboxTableViewer.refresh();
});
我已经实现了,如下所示。
我面临的问题是清除 CheckboxTableViewer 的内容,现在我正在跟踪 CheckboxTableViewer 中存在的项目,然后删除第 0 个元素,但是当用户在列出非常迅速。
list= new org.eclipse.swt.widgets.List(container, SWT.CHECK | SWT.FULL_SELECTION | SWT.VIRTUAL);
list.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
复选框代码
table = new Table(container, SWT.CHECK | SWT.FULL_SELECTION | SWT.VIRTUAL);
table.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
table.setHeaderVisible(true);
checkboxTableViewer = new CheckboxTableViewer(table);
在侦听器中,我尝试获取 table 并清除 table 但这不起作用。
checkboxTableViewer .getTable().clearAll();
请让我知道如何进行。
更新代码
package com.checkagain.importWizards;
public class PageTwo extends WizardPage {
private Text text1;
private Composite container;
org.eclipse.swt.widgets.List single;
Table table ;
CheckboxTableViewer checkboxTableViewer;
List elementList= new ArrayList();
public PageTwo() {
super("PageTwo");
setTitle("PageTwo");
setDescription("Fake Wizard: PageTwo");
elementList.add("1");
elementList.add("2");
elementList.add("3");
elementList.add("4");
elementList.add("5");
elementList.add("6");
}
@Override
public void createControl(Composite parent) {
container = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
container.setLayout(new FillLayout());
layout.numColumns = 2;
single= new org.eclipse.swt.widgets.List(container, SWT.CHECK | SWT.FULL_SELECTION | SWT.VIRTUAL);
single.add("one");
single.add("two");
single.add("three");
single.add("four");
single.add("five");
single.add("six");
//single.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
//////Code for Check Box
table = new Table(container, SWT.CHECK | SWT.FULL_SELECTION | SWT.VIRTUAL);
//table.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
table.setHeaderVisible(true);
checkboxTableViewer = new CheckboxTableViewer(table);
single.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent arg0) {
// TODO Auto-generated method stub
//additional code added on suggestion
checkboxTableViewer.setInput(new String[0]);
checkboxTableViewer.refresh();
checkboxTableViewer.add(elementList.get(single.getSelectionIndex()));
}
@Override
public void widgetDefaultSelected(SelectionEvent arg0) {
// TODO Auto-generated method stub
}
});
setControl(container);
setPageComplete(true);
}
public String getText1() {
return text1.getText();
}
}
当您使用 JFace table 查看器时,您应该避免访问底层 Table - table 查看器会管理它。
您还指定了 SWT.VIRTUAL
标志 - tables 与此标志的行为非常不同,它仅对大 tables 有用。
您可以清除查看器,方法是使用 setInput
将 table 查看器输入设置为空数组,或者将您的内容提供程序 return 设为空元素数组并调用 refresh
- 一个简单的例子:
CheckboxTableViewer checkboxTableViewer = CheckboxTableViewer.newCheckList(shell, SWT.FULL_SELECTION | SWT.BORDER);
checkboxTableViewer.setContentProvider(ArrayContentProvider.getInstance());
checkboxTableViewer.setLabelProvider(new LabelProvider());
final List<String> input = new ArrayList<>();
input.add("entry 1");
input.add("entry 2");
input.add("entry 3");
checkboxTableViewer.setInput(input);
Button clear = new Button(shell, SWT.PUSH);
clear.setText("Clear");
clear.addListener(SWT.Selection, event ->
{
input.clear();
checkboxTableViewer.refresh();
});