开发者

Java SWT Text control not showing until Shell resize

开发者 https://www.devze.com 2023-03-10 06:16 出处:网络
My attempt here is basically to hot-switc开发者_开发百科h 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 c

My attempt here is basically to hot-switc开发者_开发百科h 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.


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?

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号