JavaFx и Spring загружаются без FXML - PullRequest
0 голосов
/ 10 марта 2019

Все примеры реализации Spring и javafx показывают использование fxml, я хотел бы уклониться от этого.

my project hierarchy

@SpringBootApplication
@ComponentScan({"com.test.dao","com.test.service.impl","com.test.service","com.service.guiModules"})
public class Main extends Application {

      private Workbench workbench;

      private TestModule testModule = new TestModule();

    public static void main(String[] args) {

        //this commented just launches the spring app, but no gui
        SpringApplication.run(Main.class, args);

        //and when i use this it launches the gui, but spring cant manage beans
    //  Application.launch(args);
    }



    @Override
    public void start(Stage primaryStage) throws Exception {
         Scene myScene = new Scene(initWorkbench());

            primaryStage.setTitle("Simple WorkbenchFX Demo");
            primaryStage.setScene(myScene);
            primaryStage.setWidth(1000);
            primaryStage.setHeight(700);
            primaryStage.show();
            primaryStage.centerOnScreen();

    }

     private Workbench initWorkbench() {
            workbench = Workbench.builder(

                    testModule

            ).build();
            return workbench;
          }

тогда здеськласс GUI

@Component
public class TestGui extends BorderPane {
// here would be gui and necesery gui logic, also here would i use my services impls
    @Autowired
    PersonService personService;

  public TestGui() {
    HBox hbox = new HBox();
    Button btn = new Button();
    Label lbl = new Label();
    hbox.getChildren().addAll(btn,lbl);
    setCenter(hbox);

    btn.setOnAction(e->lbl.setText(personService.getSomething()));
  }

здесь, наконец, класс, который возвращает графический интерфейс для основных классов workbench

public class TestModule extends WorkbenchModule {
        //it just serves that TestGui class to the main classes workbench
  public TestModule() {
    super("Hello World", MaterialDesignIcon.HUMAN_HANDSUP);
  }

  @Override
  public Node activate() {
    return new TestGui();
  }

}

Я предполагаю, что я должен аннотировать класс TestGui как компонент, чтобы позднее весна узнала, какуправлять этим.И я не буду использовать другие классы, это просто Dao, POJO и сервис и его реализация.

В моем классе AppConfig я хотел бы сказать Spring, чтобы он сканировал бины в пакете модулей

Обычно, когда они используют Springпри загрузке они используют Fxml, поэтому, когда они загружают файлы с помощью загрузчика FXML, они делают что-то вроде этого.Есть ли способ переделать это, чтобы помочь мне с тем, что мне нужно?я не нуждаюсь или планирую использовать fxml, поэтому я хотел бы просто загрузить javaclasses private final ResourceBundle resourceBundle;закрытый финальный контекст ApplicationContext;

@Autowired
public AppConfig(ApplicationContext context, ResourceBundle resourceBundle) {
    this.resourceBundle = resourceBundle;
    this.context = context;
}

public Parent load(String fxmlPath) throws IOException {
    FXMLLoader loader = new FXMLLoader();
    loader.setControllerFactory(context::getBean); //Spring now FXML Controller Factory
    loader.setResources(resourceBundle);
    loader.setLocation(getClass().getResource(fxmlPath));
    return loader.load();
}

помимо зависимостей spring и mysql в моем ПОМ, у меня также есть this и то, что я использую, чтобы просто загрузить классы графического интерфейса пользователя на главную сцену

Я понимаю, что я задаю довольно широкий вопрос, но я не нашел ни одного примера весенней загрузки и javafx без fxml.

...