powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Азы построения проложения на JavaFX
7 сообщений из 7, страница 1 из 1
Азы построения проложения на JavaFX
    #39615938
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день! Пишу первое приложение на JavaFX. Важно для меня написать правильное по структуре.
Использую Maven + MVC. Зашел в тупик, прощу помощи.
Базовая форма RootLayout.fxml + controller RootLayoutController.java
Форма, которая накладывается на базовую: PersonOverview.fxml + controller PersonOverviewController.java
Модель данных: Person.java

1.Не нашел как в PersonOverviewController передать ссылку на главное приложение. Для RootLayoutController решил через
Код: java
1.
2.
            RootLayoutController controller2 = loader.getController();
            controller2.setMainApp(this);



2. Так и не понял, как организовать "прослушивание", при котором изменения данных модели Person обновляет "на лету" форму PersonOverview

Конечная цель: при нажатии на кнопку AddData происходит заполнение полей формы :)

Во вложении пример той схемы, которую использую в приложении созданную в IDEA.
...
Рейтинг: 0 / 0
Азы построения проложения на JavaFX
    #39615949
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На всякий случай выкладываю код в спойлер
Main.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import sample.model.Person;
import sample.view.PersonOverviewController;
import sample.view.RootLayoutController;

import java.io.IOException;

public class Main extends Application {
    private Stage primaryStage;
    private BorderPane rootLayout;

    private Person person = new Person();


    @Override
    public void start(Stage primaryStage) throws Exception{
        this.primaryStage = primaryStage;
        this.primaryStage.setTitle("JavaFX App");

        initRootLayout();


    }

    public void initRootLayout() {
        try {
            // Загружаем корневой макет из fxml файла.
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(Main.class.getResource("/view/RootLayout.fxml"));
            rootLayout = (BorderPane) loader.load();

            // Отображаем сцену, содержащую корневой макет.
            Scene scene = new Scene(rootLayout);
            primaryStage.setScene(scene);
            primaryStage.show();

            // Даём контроллеру доступ к главному приложению.
            RootLayoutController controller2 = loader.getController();
            controller2.setMainApp(this);


        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public static void main(String[] args) {
        launch(args);
    }

    public void AddData(){
      person.setFirstName("Иван");
      person.setLastName("Иванов");
      person.setMiddleName("Иванович");
    }
}



RootLayoutController.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
package sample.view;

import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.AnchorPane;
import sample.Main;

import java.io.IOException;

public class RootLayoutController {
    @FXML
    private ScrollPane scrpMain;

    private Main main;

    public void setMainApp(Main main) {
        this.main = main;
    }

    @FXML
    private void initialize(){
    }

    public void showPersonOverview() {
        try {
            // Загружаем
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(Main.class.getResource("/view/PersonOverview.fxml"));
            AnchorPane personOverview = (AnchorPane) loader.load();

            // Даём контроллеру доступ к главному приложению.
            PersonOverviewController controller = loader.getController();
            controller.setMainApp(main);

            // Помещаем
            scrpMain.setContent(personOverview);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}



PersonOverviewController.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
package sample.view;

import sample.Main;

public class PersonOverviewController {

    private Main main ;

    public void setMainApp(Main main) {
        this.main = main;
    }

    public void btnAddDataClick(){
      //main.AddData();
    }
}

...
Рейтинг: 0 / 0
Азы построения проложения на JavaFX
    #39615952
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Person.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
package sample.model;

import javafx.beans.property.StringProperty;

public class Person {
    private final StringProperty firstName;
    private final StringProperty lastName;
    private final StringProperty middleName;

    public Person() {
        this(null, null, null);
    }

    public Person(StringProperty firstName, StringProperty lastName, StringProperty middleName) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.middleName = middleName;
    }

    public String getFirstName() {
        return firstName.get();
    }

    public StringProperty firstNameProperty() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName.set(firstName);
    }

    public String getLastName() {
        return lastName.get();
    }

    public StringProperty lastNameProperty() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName.set(lastName);
    }

    public String getMiddleName() {
        return middleName.get();
    }

    public StringProperty middleNameProperty() {
        return middleName;
    }

    public void setMiddleName(String middleName) {
        this.middleName.set(middleName);
    }
}

...
Рейтинг: 0 / 0
Азы построения проложения на JavaFX
    #39615957
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorDИспользую Maven + MVC.не нужно ни первое ни второе.
MVVM
Найди демку в сети.
Зачем сюда выкладывать?
...
Рейтинг: 0 / 0
Азы построения проложения на JavaFX
    #39616001
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Реальный проект, который пишу, на много сложнее того, что я выложил - Maven здорово помогает, а MVC нужно для понятия принципа. В реальном проекте все работает, но меня не покидает чувство, что не так оно должно быть по структуре. Решил разобраться и переписать. А этот пример я написал, что бы выложить суть проблемы. Все найденные демки очень примитивные, уровень Hello World на одной форме.
...
Рейтинг: 0 / 0
Азы построения проложения на JavaFX
    #39616004
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
За наводку на MVVM - спасибо. Сижу, читаю....
...
Рейтинг: 0 / 0
Азы построения проложения на JavaFX
    #39616010
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorD,
Биндинг не забудь
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Азы построения проложения на JavaFX
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]