簡體   English   中英

使用MVP模型時在JavaFX中更改場景

[英]Changing scene in javaFX while using MVP model

因此,我在學校項目中使用javaFX,並且嘗試在主窗口中更改場景,但是我不得不使用MVP模型,因此我必須設置事件處理程序以在presenter類中更改場景。 我嘗試通過使用Main類中的變量(在其中初始化第一個場景)並從那里更改場景來做到這一點

 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 

該代碼尚未進行微調,因此請不要判斷。 該按鈕可以工作,但是給定的錯誤在Presenter的Main.window ...上“無法解析符號'Main'”

Presenter打包在一個名為“ view”的包中,而Main類根本沒有打包,如果我將Presenter從包中取出,代碼似乎可以正常工作,但是根據MVP模型,這是不正確的。

對於您的錯誤:“無法解析符號'Main'”

此錯誤消息是很不言自明的。 編譯器無法弄清楚“ Main”是什么。

您弄錯的第一件事是:

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

如果要通過“ Main.window”訪問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分開,所以我建議為Presenter創建一個“ main”包(最好使用項目名稱)和一個子包“ main.view”。 這樣,您將得到一個像這樣的目錄結構:

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

但是...僅在類位於不同的程序包中時才需要導入。 因此,如果將兩個類都放入“視圖”中,則不需要導入。

FWIW:

如果您的文件命名不正確,您也可能會收到錯誤消息。 它必須命名為Main.java”。

如果無法針對Main中的其他錯誤進行編譯,則也可能會導致問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM