在Shell调整大小之前,Java SWT Text控件不会显示

时间:2011-06-03 00:06:11

标签: java resize swt screen

我的尝试基本上是在程序运行时热切换组件。如果用户按下按钮,则作为浏览器的控件变为文本控件。我使用一个控件指向浏览器,然后将其切换为指向Text控件(在非显示的shell上从屏幕上绘制)但是,我遇到了一些问题。当前按下按钮时,浏览器会消失,但在调整外壳大小之前,它不会出现任何内容。

以下是相关的代码段:

切换例程:

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();
}

创建对象的buttonListener:

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);
    }

我的调整大小的听众:

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));
    }
}); 

我已经尝试了一切来解决这种情况,但唯一有效的方法就是调整shell的大小。

我可能会解决这个可怕的错误,但这是我的第一个重大项目之一,所以我只是掌握了一些东西。

1 个答案:

答案 0 :(得分:4)

似乎您可能需要刷新布局缓存。见这个

  

Why does an SWT Composite sometimes require a call to resize() to layout correctly?