Изменение сцены в javaFX при использовании модели MVP - PullRequest
0 голосов
/ 02 марта 2019

Итак, я использую javaFX для школьного проекта и пытаюсь изменить сцену в моем основном окне, но я ДОЛЖЕН использовать модель MVP, поэтому мне нужно установить обработчик событий для изменения сцены внутри класса докладчика.,Я попытался сделать это, используя переменную из моего основного класса (где я инициализирую первую сцену) и изменив сцену оттуда

public class Main extends Application {
    public Stage window = new Stage();
    @Override
    public void start(Stage primaryStage){
        this.window = primaryStage;
        Model model = new Model();
        mainMenuView view = new mainMenuView();
        Presenter presenter = new Presenter(model, view);
        Scene mainMenu = new Scene(view);

        window.setScene(mainMenu);
        window.setTitle("Landen Quiz Main Menu");
        window.setWidth(250);
        window.setHeight(400);
        window.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
    
}
//Main class used to make the main menu (first scene)

public class Presenter {
    private Model model;
    private view.mainMenuView mainMenuView;
    public Presenter(Model model, mainMenuView mainMenuView) {
        this.model = model;
        this.mainMenuView = mainMenuView;
        addEventHandlers();
        updateView();
    }

    private void addEventHandlers(){
        mainMenuView.getBtnHelp().setOnAction(e -> {
            helpView view = new helpView();
            Scene help = new Scene(view);
            Main.window.setScene(help);
            Main.window.setTitle("Help");
            Main.window.show();
        });

    }
    private void updateView(){
        //fill mainMenuView with data from model
    }
}
//Presenter class used to handel events in GUI

Код еще не настроен, так что не судите.Кнопка работает и т. Д., Но данная ошибка находится в Main.window ... в Presenter "не удается разрешить символ" Main ""

Presenter упакован в пакет с именем "view", а основной класс -если пакет не упакован, код работает нормально, если я возьму Presenter из пакета, но в соответствии с моделью MVP он некорректен.

1 Ответ

0 голосов
/ 02 марта 2019

По вашей ошибке: "не удается разрешить символ 'Main'"

Это сообщение об ошибке само по себе не требует пояснений.Компилятор не может понять, что такое "Main".

Первое, что вы ошиблись, это:

public class Main extends Application {
    public Stage window = new Stage();

Если вы хотите получить доступ к свойству окна через "Main.window"вам нужно сделать его статическим.

public class Main extends Application {
    public static Stage window;

И в начале вы также должны изменить (последовательный / непротиворечивый) «this.window» на «Main.window»:

public void start(Stage primaryStage){
    //this.window = primaryStage;
    Main.window = primaryStage;

Во-вторых, компилятору не сказали, что такое Main.Обычно это недостающий импорт.Поэтому вам нужно добавить оператор импорта в Presenter в самом начале после имени пакета.

package view.presenter;
import package.Main;

Но пусть ваша IDE поможет вам - всем основным IDE (Eclipse, Intellij, Netbeans...) предложит импортировать пакет, если таковой имеется.

И да, для этого вам нужен пакет для Main.Неважно, как вы это называете - вам нужен пакет.См. Также: Как получить доступ к java-классам в пакете по умолчанию? и Как импортировать класс из пакета по умолчанию

Как это Main, и я предполагаюВы должны отделить «view» от Main. Я бы рекомендовал создать «main» пакет (возможно, лучше использовать имя проекта) и подпакет «main.view» для вашего Presenter.При этом вы получите структуру каталогов, подобную этой:

main+
    +- view + 
    |       +- Presenter.java
    |
    +-Main.java

Но ... Этот импорт необходим, только если классы находятся в разных пакетах.Поэтому, если вы поместите оба класса в «представление», вам не понадобится импорт.

FWIW:

Вы также можете получить сообщение об ошибке, если ваш файл имеет неправильное имя.Он должен называться Main.java ".

Если Main не может быть скомпилирован для других ошибок в нем, это также может привести к проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...