2014-11-02 54 views
0

我有一個主父殼和一個子殼。子shell是用於某些設置的。完成設置後。我想關閉子shell並繼續使用父shell。我正在使用display_Settings.dispose();來關閉子shell。但是這會關閉這兩個shell(父母和孩子)。當我只點擊子殼的紅色X按鈕時,只有子殼關閉。這就是我要的。我怎樣才能實現它?另外,當子shell打開時,可以在父shell上操作/單擊按鈕。我想禁止這個,直到我完成了子shell中的設置(直到我關閉子shell)爲止。用類似紅色的X按鈕關閉子彈殼

下面是我如何打開父shell的子shell:

btnSettings.addListener (SWT.Selection, new Listener() { 
     @Override 
     public void handleEvent (Event event) { // Button Settings event 
      try { 
       my_Obect = new My_Object(); 
       Display display_Settings = Display.getDefault(); 
       Child_Settings shell_Settings = new Child_Settings(display_Settings, my_Object); 
       shell_Settings.open(); 
       shell_Settings.layout(); 
       while (!shell_Settings.isDisposed()) { 
        if (!display_Settings.readAndDispatch()) { 
         display_Settings.sleep(); 
        } 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 

父GUI類和兒童GUI類是兩個不同的類,下面是我如何打開父shell:

public static void main(String args[]) { 

    try { 
     Display display = Display.getDefault(); 
     GUI_Test shell = new GUI_Test(display); 
     shell.open(); 
     shell.layout(); 
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) { 
       display.sleep(); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

雖然顯示變量不同,但兩個shell關閉,實際上它們的名稱並不重要,因爲它們都是不同的類。如果你能幫助我,我會很高興!

+0

請注意,你並不需要一個以上的事件循環('readAndDispatch()'的東西。一個是足夠的。 – Baz 2014-11-03 20:50:26

+0

@Baz'readAndDispatch()'屬於不同的對象? – Anarkie 2014-11-05 13:31:11

+0

你有兩個'而'事件循環,你只需要''main'方法中的一個 – Baz 2014-11-05 16:54:21

回答

0

這是一個帶有按鈕的Shell的示例,該按鈕在選中時會運行模態子Shell。

< - 語言:郎爪哇 - >

Display display = new Display(); 
final Shell shell = new Shell(display); 
shell.setText("Shell"); 
shell.setSize(200, 200); 
shell.setLayout(new FillLayout()); 
Button button = new Button(shell, SWT.PUSH); 
button.setText("Open Modal Child Shell"); 
button.addListener(SWT.Selection, new Listener() { 
    @Override 
    public void handleEvent(Event event) { 
    Shell dialog = new Shell(shell, SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM); 
    dialog.setText("Dialog"); 
    dialog.setSize(200, 200); 
    dialog.open(); 
    } 
}); 
shell.open(); 
while(!shell.isDisposed()) { 
    if(!display.readAndDispatch()) { 
    display.sleep(); 
    } 
} 
display.dispose(); 

而對話框窗口打開時阻止與主殼的所有交互:這是通過SWT.APPLICATION_MODAL風格的標誌來實現的。 SWT.DIALOG_TRIM樣式標誌添加了一個帶有關閉按鈕的標題欄,但不需要獲取模態行爲。

對話框外殼可以用Esc關閉。代碼片段結尾處的主循環使應用程序保持活動狀態,直到主外殼關閉。