Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Азы построения проложения на JavaFX / 7 сообщений из 7, страница 1 из 1
16.03.2018, 13:21
    #39615938
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Азы построения проложения на JavaFX
Добрый день! Пишу первое приложение на 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
16.03.2018, 13:40
    #39615949
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Азы построения проложения на JavaFX
На всякий случай выкладываю код в спойлер
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
16.03.2018, 13:47
    #39615952
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Азы построения проложения на JavaFX
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
16.03.2018, 13:57
    #39615957
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Азы построения проложения на JavaFX
IgorDИспользую Maven + MVC.не нужно ни первое ни второе.
MVVM
Найди демку в сети.
Зачем сюда выкладывать?
...
Рейтинг: 0 / 0
16.03.2018, 15:28
    #39616001
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Азы построения проложения на JavaFX
Petro123,

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


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