0
我在專門的查看器旁邊有一個樹查看器。在樹狀視圖中選擇某些內容時,關於此對象的詳細信息將顯示在專用查看器中。 TreeViewer tree
,Composite control
和MySpecializedViewer viewer
是實例變量。複合的動態刷新
public TheEverythingViewer(Composite parent) {
control = new Composite(parent, SWT.NONE);
control.setLayout(new GridLayout(2, false));
tree = new TreeViewer(control);
tree.setContentProvider(new MyContentProvider());
tree.setLabelProvider(new MyLabelProvider());
tree.setUseHashlookup(true);
tree.getControl().setLayoutData(new GridData(GridData.BEGINNING, GridData.FILL, false, true, 1, 1));
tree.addSelectionChangedListener(new ISelectionChangedListener() {
@Override public void selectionChanged(SelectionChangedEvent event) {
try {
IStructuredSelection sel = (IStructuredSelection) event.getSelection();
MyClass myInput = (MyClass) sel.getFirstElement();
if (viewer != null)
if (!viewer.getControl().isDisposed())
viewer.getControl().dispose();
viewer = new MySpecializedViewer(control, table);
control.getShell().layout();
} catch (Exception e) {
if (viewer != null)
if (!viewer.getControl().isDisposed())
viewer.getControl().dispose();
viewer = null;
}
}
});
}
我做錯了什麼?我只是想:
+--------------+--------------------------------------------+
| + Node | |
| - Node | |
| + Node | My |
| - Node | |
| - Node | Specialized |
| | Viewer |
| | |
| | |
| | |
| | |
| | |
| | |
| | +--------+ |
| | | | |
| | | | |
| | | | |
| | +--------+ |
| | |
| | |
| | |
| | |
+--------------+--------------------------------------------+
專門的查看器有一些表,根據所選節點需要消耗更多或更少的空間。目前,創建專用查看器的新實例要比改變其輸入要簡單得多(這不適用於ATM)。
不重新創建查看器涉及到更改表的結構。如果我不強制shell重新佈局,我可以調用什麼方法(在什麼對象上)來實現更新UI的愚蠢行爲?我從來沒有見過'someControl.redraw()'實際上在這種情況下工作。 – 2012-07-07 14:12:06
什麼表?沒有提到一張桌子。 *如何重新創建觀衆需要改變結構? pack()和layout()是父級Composite,而不是整個Shell。 – nitind 2012-07-07 17:39:14
我在最後提到,「專門的查看器具有需要消耗更多或更少空間的表,取決於所選節點。」 pack()和layout()方法似乎在做伎倆。現在我正在處理一個有趣的錯誤,每個'pack();佈局();',表格會消耗更多的寬度,父親進度越來越遠,並越過組合邊緣。 – 2012-07-08 03:38:11