Текстовый элемент управления Java SWT не отображается до изменения размера оболочки - PullRequest
2 голосов
/ 03 июня 2011

Моя попытка здесь заключается в том, чтобы в горячем режиме переключать компонент во время работы программы.Если пользователь нажимает кнопку, то браузер превращается в текстовый элемент управления.Я использую элемент управления, чтобы указать на браузер, а затем переключить его, чтобы он указывал на элемент управления «Текст» (который рисуется за пределами экрана в не отображающей оболочке). Однако у меня возникают некоторые проблемы.В настоящее время при нажатии кнопки браузер исчезает, но на его месте ничего не появляется, пока размер оболочки не изменится.

Вот соответствующие фрагменты кода:

Процедура переключения:

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

Я попробовал все, чтобы исправить эту ситуацию, но единственное, что сработало, былоизменить размер оболочки.

Возможно, я поступаю так ужасно неправильно, но это один из моих первых крупных проектов, поэтому я просто разбираюсь в этом.

1 Ответ

5 голосов
/ 03 июня 2011

Кажется, вам может потребоваться очистить кэш макета. Посмотреть это

Почему SWT Composite иногда требует вызова resize () для корректного размещения?

...