TableViewer shrinks to a single row with a scroll bar when new input is set

只谈情不闲聊 提交于 2019-12-11 03:28:35

问题


I am implementing a plug-in in eclipse, which reads a set of values from a database and displays it in a TableViewer inside a ViewPart. The TableViewer uses an ArrayContentProvider as shown

viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
...
viewer.setContentProvider(new ArrayContentProvider());

I also have a handler which has access to the TableViewer instance for importing data from an XML file. When the importer imports data, I create a ModelProvider instance which generates a list of objects whose data is displayed by TableViewer.

The handler then sets the input:

viewer.setInput(new ModelProvider(Data.getDocs()).getTableRows());

When I test this application, with this ViewPart already open (and the TableViewer being empty) and invoke the handler for importing data, the data is imported succesfully but the TableViewer shows only a single row and the scroll bar. Only when I drag the ViewPart to some other location on the Workbench, then all the rows are shown.

I have even tried:

viewer.setInput(new ModelProvider(Data.getDocs()).getTableRows());
viewer.refresh();

and

viewer.setInput(null);
viewer.setInput(new ModelProvider(Data.getDocs()).getTableRows());
viewer.refresh();

but nothing works. How do I make all the rows display as soon as new input is set?


回答1:


I don't think you have a table problem, but a layout problem.

If your viewer's parent has a GridLayout, then do:

viewer.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

OR you can just set a FillLayout on the parent, and that's it.

(if you think I misunderstood your question, please post a screenshot)



来源:https://stackoverflow.com/questions/32345882/tableviewer-shrinks-to-a-single-row-with-a-scroll-bar-when-new-input-is-set

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!