我目前正在开发一个向导,它将带我完成几个步骤。 在其中一个WizardPages上,我想要一个动态填充的表,用户可以在其中选择一些行。 我正在使用CheckboxTableViewer。 目前它运作良好(包括动态列数等) 结果如截图所示。
我的问题是第一列跨越列并带有复选框。我想有以下行为:
我在向导页面(extends WizardPage
)中使用的代码如下所示:
public class ShowResults extends WizardPage {
private Table table;
public ShowResults() {
super("wizardPage");
setTitle("Title");
setDescription("Description");
}
public void createControl(Composite parent) {
Composite container = new Composite(parent, SWT.NULL);
setControl(container);
container.setLayout(new GridLayout(1, false));
CheckboxTableViewer checkboxTableViewer = CheckboxTableViewer.newCheckList(container, SWT.BORDER | SWT.FULL_SELECTION);
createColumns(checkboxTableViewer);
table = checkboxTableViewer.getTable();
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
table.setHeaderVisible(true);
table.setLinesVisible(true);
checkboxTableViewer.setContentProvider(ArrayContentProvider.getInstance());
checkboxTableViewer.setInput(getData()); // returns a list of Record-Objects
}
private void createColumns(CheckboxTableViewer checkboxTableViewer) {
// get the required columns as list and act for each
for(String columnName : getColumnNames()){
// create a column for the first name
TableViewerColumn colFirstName = new TableViewerColumn(checkboxTableViewer, SWT.NONE);
colFirstName.getColumn().setWidth(150);
colFirstName.getColumn().setText(columnName);
colFirstName.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Record r = (Record) element;
return r.getValue(columnName);
}
});
}
}
我没有包含Record
的类定义,因为无论如何显示信息都有效。 (我想这对这个问题并不重要)。
答案 0 :(得分:1)
为什么不看看星云网格小部件?你可以为列标题编写自己的CellRenderers。见here
答案 1 :(得分:0)
另一种解决方案可能是不使用标头。只是表现得像你有一个:
将一行保存为表中固定的第一个元素,并为该特殊模型后面的元素添加一个唯一的setter。它不仅应该设置它自己的值,还应该在列表中设置其他元素值。它的其他成员将充当静态标题。
否则,如果您设法获取标题中的复选框,并且它在您的平台上运行(MacOS看起来如此),它可能仍然无法在另一个上运行。