Eclipse - 未在自定义对话框中显示的JFace表列
问题描述:
我正在使用JFace进行自定义对话框,但遇到列未显示时出现问题。这是我的代码。我所得到的是没有列和左边蓝线的表格。这扩展了JFace对话框。Eclipse - 未在自定义对话框中显示的JFace表列
@Override
protected Control createDialogArea(Composite parent)
{
Composite container = (Composite) super.createDialogArea(parent);
container.setLayout(new GridLayout());
addTableToDialog(container);
container.getShell().setSize(600, 400);
return container;
}
private void addTableToDialog(Composite container)
{
_tableViewer = new TableViewer(container, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
_tableViewer.getTable().setHeaderVisible(true);
_tableViewer.getTable().setLinesVisible(true);
_tableViewer.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
renderHeaders();
}
私人无效renderHeaders(){
int bound = 1;
for (int header = 0; header < _headers.length; header++)
{
String tableHeader = _headers[header];
createTableViewerColumn(tableHeader, bound);
}
}
private TableViewerColumn createTableViewerColumn(String title, int bound)
{
final TableViewerColumn viewerColumn = new TableViewerColumn(_tableViewer, SWT.NONE);
final TableColumn tableColumn = viewerColumn.getColumn();
tableColumn.setText(title);
tableColumn.setResizable(true);
tableColumn.setMoveable(true);
_tableColumnLayout.setColumnData(tableColumn, new ColumnWeightData(bound));
return viewerColumn;
}
答
下面的解决了这个问题对我来说。我在创建TableViewer时定义TableColumnLayout,并将其设置为包含该表的组合的布局。
private void addTableToDialog(Composite container)
{
TableColumnLayout tableColumnLayout = new TableColumnLayout();
Composite tableContainer = new Composite(container, SWT.NONE);
tableContainer.setLayout(tableColumnLayout);
tableContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
_tableViewer = new TableViewer(tableContainer, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
_tableViewer.getTable().setHeaderVisible(true);
_tableViewer.getTable().setLinesVisible(true);
renderHeaders(tableColumnLayout);
}
你在哪里定义'_tableColumnLayout'?如果这是'TableColumnLayout',需要在作为其单个子表的'Composite'上设置。 –
感谢Greg,我在构造函数中定义了'TableColumnLayout'。我在创建表格查看器时将其更改为在本地定义它。当创建一个'Composite'来保存表格时,我将布局设置为'GridLayout()',但将其更改为'TableColumnLayout',现在它可以工作。干杯! –