问题
My attempt here is basically to hot-switch a component while the program is running. If the user presses a button then the control that is a browser turns into a Text control. I use a control to point to the browser and then switch it to point to the Text control(which is drawn offscreen on a non-showing shell) However, I'm having some issues. Currently when the button is pressed the browser disappears but nothing appears in it's place until the shell is resized.
Here are the relevant code snippets:
The switch routine:
private void switchWindow(Control cont) {
bottomPointer.setParent(offDraw);
bottomPointer = cont;
bottomPointer.setParent(outer);
bottomPointer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
outer.redraw();
}
The buttonListener that creates the object:
class textSelectionListener implements SelectionListener {
public void widgetSelected(SelectionEvent event) {
Text bottomText = new Text(offDraw, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
gd.grabExcessVerticalSpace = true;
gd.grabExcessHorizontalSpace = true;
bottomText.setLayoutData(gd);
switchWindow(bottomText);
}
And my resize listener:
outer.addListener (SWT.Resize, new Listener () {
//add resize listener to automatically resize both browsers
public void handleEvent (Event e) {
Rectangle clientArea = outer.getClientArea ();
browser.setLayoutData(new GridData(clientArea.width, 3*clientArea.height/5));
bottomPointer.setLayoutData(new GridData(GridData.FILL_BOTH));
}
});
I've tried everything to fix this situation but the only thing that has worked was to resize the shell.
I'm probably going about this horribly wrong but this is one of my first major projects so I'm just getting the hang of things.
回答1:
It seems you may need to flush the layout cache. See this
Why does an SWT Composite sometimes require a call to resize() to layout correctly?
来源:https://stackoverflow.com/questions/6221728/java-swt-text-control-not-showing-until-shell-resize