Все примеры реализации Spring и javafx показывают использование fxml, я хотел бы уклониться от этого.
@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.