2015-03-25 56 views
1

我的e4 javafx應用程序在顯示主窗口之前顯示登錄對話框。e4-Javafx:如何將當前主題應用於登錄對話框

LifeCycleManager類

@PostContextCreate 
void postContextCreate(Application app, IEclipseContext econtext){ 

    //display login dialog extends org.eclipse.fx.ui.dialogs.TitleAreaDialog 
    LoginDialog dialog = new LoginDialog(null, "Login", "Login title", "Message", ""); 
    int response = dialog.open();    

    if (response != Dialog.OK_BUTTON) { 
     System.exit(0); 
    } 
    .... 
} 

對話框有默認的JavaFX樣式(摩德納)。

我如何獲得當前主題並應用於此對話框?

回答

1

我發現瞭如何從當前主題

import org.eclipse.fx.ui.services.theme.ThemeManager; 

@Inject 
ThemeManager themeManager; 

ObservableList<URL> stylesheets = themeManager.getCurrentTheme().getStylesheetURL(); 

接下來是創建虛擬級並添加樣式表來得到它的樣式表;

Scene scene = new Scene(new HBox()); 
Stage stage = new Stage; 
stage.setScene(scene); 
for (URL url : stylesheets) 
{ 
    stage.getScene().getStylesheets().add(url.toExternalForm()); 
} 

然後設置舞臺父窗口(第一個參數)對話框

LoginDialog dialog = new LoginDialog(stage, "Login", "Login title", 
        "Message", ""); 

對話框將來自父系的階段複製樣式表,將它們添加到自己的舞臺。

它的工作原理。但我懷疑這是一種「適當」的方式。必須有其他解決方案。

0

你可以通過調用設置的成分中的默認樣式集:

getStylesheets().add(new File("conf/application.css").toURI().toURL().toExternalForm()); 

你試試這個?

+0

在我的情況下,我不想從特定文件添加樣式表。我需要從當前主題(可以是其中的許多主題)中獲取樣式表,並將它們(樣式表)添加到對話階段。 – 2015-03-26 12:08:28

相關問題