2015-09-24 4 views
0

Я использую SWT 4.4.2 (win32) для создания графического интерфейса пользователя для простого тестового приложения.
Нажимая кнопку или пункт меню, я хочу показать новое окно. Но это окно не должно быть модальным диалогом. Это должно быть своего рода оверлейное окно, чтобы приложение не блокировалось.Графическая оболочка невидима после установки видимой к истине

Сначала при запуске я создаю все необходимые компоненты моей программы:

private void initUI() { 
    mainWindow = new Shell(display); 
    ... 

    overlayWindow = new Shell(mainWindow, SWT.MODELESS); 
    overlayWindow.setLocation(200, 200); 
    overlayWindow.setSize(160, 33); 
    overlayWindow.setText("Overlay"); 
    overlayWindow.setVisible(false); 

    label = new Label(overlayWindow, SWT.CENTER); 
    label.setLocation(10, 10); 
    label.setSize(140, 13); 
    label.setText("Test"); 
} 

Позже я проверить, является ли viisble окна наложения, поскольку видимость зависит от некоторых параметров программы, и если окно скрыто в этом Я хочу это показать:

if (!overlayWindow.getVisible()) { 
    overlayWindow.setVisible(true); 
    overlayWindow.setFocus(); 
} 

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

ответ

0

(Это не не обязательно отвечать на вопрос, но отправляя код в комментарий не будет работать)

Я думаю, что проблема должна быть где-то в коде, который вы оставили вне. Если я закончу предоставленный код, как это так, он работает, как ожидалось:

public static void main(String[] args) { 
    Display display = new Display(); 
    // create and open main shell 
    Shell mainShell = new Shell(display); 
    mainShell.setText("Main"); 
    mainShell.open(); 
    // create overlay shell 
    final Shell overlayShell = new Shell(mainShell, SWT.MODELESS); 
    overlayShell.setLocation(200, 200); 
    overlayShell.setSize(160, 33); 
    overlayShell.setText("Overlay"); 
    // add mouse-down listener that opens overlay shell 
    mainShell.addListener(SWT.MouseDown, new Listener() { 
    @Override 
    public void handleEvent(Event event) { 
     overlayShell.setVisible(true); 
     overlayShell.setFocus(); 
    } 
    }); 

    while(!mainShell.isDisposed()) { 
    if(!display.readAndDispatch()) 
     display.sleep(); 
    } 
    display.dispose(); 
} 

Нажмите на основной оболочки и откроется наложения оболочки. Обратите внимание, что оверлейная оболочка имеет только тонкую черную рамку и без заголовка.

Screenshot of overlay shell