我找不到这个特殊情况的答案(使用CheckboxTableViewer
),所以我希望它不是重复的。
我在Eclipse视图(3.x)中有以下createPartControl()
。
我正在尝试在GridLayout
中显示两个按钮和一张可检查表格,如下所示
-------------------
| Button | Button |
-------------------
| Table |
-------------------
没什么了不起的。到目前为止,一切都很好。我的表嵌入在CheckboxTableViewer
中,只有一列,有时内容(String
)比列宽更长。所以我试图使Table
(通过viewer.getTable()
得到,而不是显式构造!)可滚动以使所有内容可用。这不起作用,我不明白为什么。
我玩过SWT
样式位(SWT.H_SCROLL
,SWT.V_SCROLL
),我尝试了ScrollableComponent
,但无济于事。我无法让ScrolledComponent
工作,因为我没有明确地构建我的表,因此无法正确setContents()
。
以下是我createPartControl()
的要点。
public void createPartControl(Composite parent) {
parent.setLayout(new GridLayout(2, false));
addSelectionButtons(parent); // Works
myTableViewer = CheckboxTableViewer.newCheckList(parent, SWT.BORDER);
myTableViewer.getTable().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
Table myTable = (Table) myTableViewer.getControl();
TableLayout tableLayout = new TableLayout();
tableLayout.addColumnData(new ColumnWeightData(100, 50, true));
myTable.setLayout(tableLayout);
myTableViewer.setContentProvider(new MyContentProvider());
TableViewerColumn viewerCol = new TableViewerColumn(myTableViewer, SWT.LEFT);
TableColumn col = viewerCol.getColumn();
col.setText("My column");
viewerCol.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
return text; // Dummy var
}
});
myTableViewer.setInput(getInput()); // Gets model
myTableViewer.getTable().setHeaderVisible(true);
myTableViewer.getTable().setLinesVisible(true);
}
我知道这是边缘“给我teh codez”,但我真的找不到这个设置的问题。
答案 0 :(得分:0)
我已经设法通过回到原点并以我能找到的最通用的方式重新实现来解决这个问题。即:
LabelProvider
(并摆脱了ColumnLabelProvider
),GridData
布局数据对象设置为表格(否则没有弄乱它),TableColumn
部分(尽管表中只有一列,但仍需要声明TableColumn
以设置列标题)。 注意: TableColumn
必须为pack()
,否则内容不会显示。从TableColumn
API:“使接收器的大小调整为其首选大小。”简单而有效。
public void createPartControl(Composite parent) {
parent.setLayout(new GridLayout(1, true));
addSelectionButtons(parent); // Adds select/deselect all buttons
myTableViewer = CheckboxTableViewer.newCheckList(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
myTableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
myTableViewer.setContentProvider(new MyContentProvider());
myTableViewer.setLabelProvider(new MyLabelProvider());
myTableViewer.setInput(getInput()); // Gets model
TableColumn column = new TableColumn(myTableViewer.getTable(), SWT.FILL);
column.setText("My column");
column.pack();
myTableViewer.getTable().setHeaderVisible(true);
myTableViewer.getTable().setLinesVisible(true);
}