Java SWT Text control not showing until Shell resize

自古美人都是妖i 提交于 2020-01-05 03:31:25

问题


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

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