e4 Javafx:如何将当前主题应用于登录对话框

e4 Javafx:如何将当前主题应用于登录对话框,java,css,javafx,e4,efxclipse,Java,Css,Javafx,E4,Efxclipse,我的e4javafx应用程序在显示主窗口之前显示登录对话框 生命周期管理器类 @PostContextCreate void postContextCreate(Application app, IEclipseContext econtext){ //display login dialog extends org.eclipse.fx.ui.dialogs.TitleAreaDialog LoginDialog dialog = new LoginDialog(null

我的
e4javafx
应用程序在显示主窗口之前显示登录对话框

生命周期管理器类

@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样式(modena)


如何获取当前主题并应用于此对话框?

您可以通过调用以下命令为组件设置默认样式集:

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

你试过了吗?

我发现了如何从当前主题中获取样式表

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

@Inject
ThemeManager themeManager;

ObservableList<URL> stylesheets =  themeManager.getCurrentTheme().getStylesheetURL();
然后将阶段设置为对话框的父窗口(第一个参数)

LoginDialog dialog = new LoginDialog(stage, "Login", "Login title",
                  "Message", "");
对话框将从父阶段复制样式表,并将它们添加到自己的阶段


它起作用了。但我怀疑这是一种“适当”的方式。必须有其他解决方案。

在我的情况下,我不想添加特定文件中的样式表。我需要从当前主题中获取样式表(可以是许多(主题))并将它们(样式表)添加到对话阶段。
LoginDialog dialog = new LoginDialog(stage, "Login", "Login title",
                  "Message", "");