e4-Javafx: как применить текущую тему к диалогу входа

1

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 по умолчанию (modena).

Как получить текущую тему и применить к этому диалоговому окну?

Теги:
javafx
efxclipse
e4

2 ответа

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
    В моем случае я не хочу добавлять таблицу стилей из конкретного файла. Мне нужно получить таблицы стилей из текущей темы (их может быть много (тем)) и добавить их (таблицы стилей) в диалоговое окно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню