標題可能有點模糊,所以請允許我將它定義得更好一點。我有一段代碼(在下面):一個簡單的主菜單,用於我正在開發的遊戲。一切運作良好,除了開始按鈕。JavaFX按鈕上的新場景點擊
我想要做的是點擊開始按鈕,並在相同的舞臺(窗口)上出現一個新的場景。我不想看到一個新窗口打開。我曾經和一些更有經驗的Java交流過,他們告訴我爲MenuFX和GameFX創建單獨的類。如果是這樣的話,我需要在MenuFX類的GameFX類上調用一些啓動或啓動方法,對嗎?這是最好的方法,還是我想在所有類中保留所有與FX相關的代碼?另外,我應該爲所有的外匯工作保持同一個舞臺,不是嗎?
This雖然後文提到了一些事情,但我並不熟悉討論的一些術語 - 例如,我仍然不理解Root的概念。
此外,this後談論類似的應用程序,但我沒有使用FXML或SceneBuilder ...我不知道它是否有任何關係。
MenuFX.java - 爲了簡潔起見,我已經刪除了一些工作代碼。您可以看到,我需要幫助的是將「開始」按鈕綁定到某種功能,以創建一個新的空白場景。
/*
* This is simply working on the title screen.
*/
// Asssume all imports are correct
import java.everythingNeeded
public class MenuFX extends Application {
@Override
public void start (Stage primaryStage) {
// Make the window a set size...
primaryStage.setResizable(false);
// Create menu vbox and set the background image
VBox menuVBox = new VBox(30);
menuVBox.setBackground(new Background(new BackgroundImage(new
Image("image/bambooBG.jpg"), null, null, null, new BackgroundSize(45,
45, true, true, true, true))));
// Create start button
Button startButton = new Button("Start Game");
// TODO Some things...
// Need assistance here
// Create help button
Button helpButton = new Button("Help");
helpButton.setOnAction(e -> THINGS);
// Create music toggle button
ToggleButton musicButton = new ToggleButton("Music On/Off");
musicButton.setOnAction(e -> THINGS);
// Create credits button
Button creditsButton = new Button("Credits");
creditsButton.setOnAction(THINGS);
// Create exit button and set it to close the program when clicked
Button endButton = new Button("Exit Game");
endButton.setOnAction(e -> Platform.exit());
// Add all nodes to the vbox pane and center it all
// Must be in order from top to bottom
menuVBox.getChildren().addAll(startButton, helpButton, musicButton, creditsButton, endButton);
menuVBox.setAlignment(Pos.CENTER);
// New scene, place pane in it
Scene scene = new Scene(menuVBox, 630, 730);
// Place scene in stage
primaryStage.setTitle("-tiles-");
primaryStage.setScene(scene);
primaryStage.show();
}
// Needed to run JavaFX w/o the use of the command line
public static void main(String[] args) {
launch(args);
}
}
重述:我想單擊開始按鈕並使當前打開的窗口變爲空白的場景。
這裏是全部的MenuFX類的引擎收錄: http://pastebin.com/n6XbQfhc
感謝您的幫助,
巴格爾
這是不是很清楚你在問什麼。您的'GameFX'類只需要擴展某種類型的節點類,或者訪問節點實例。然後,當按下按鈕時,可以用該節點替換場景的根。 [Here](http://stackoverflow.com/questions/32464698/java-how-do-i-start-a-standalone-application-from-the-current-one-when-both-are)是一篇文章I回答了一段時間,這似乎有點類似:爲每個班級打開新的窗口,但你顯然不必這樣做。如果這沒有幫助,你可能需要澄清你的問題。 –
@James_D [This](http://stackoverflow.com/questions/36551431/can-you-write-two-different-java-fx-scenes-as-two-separate-classes?rq=1)post很類似於我的問題。我剛剛發生了。另外,我不明白Root是什麼。我在很多代碼示例中都看到了它,但對於我來說,它似乎對我來說太深入了。我很抱歉聽起來很無知,但我實際上在自學Java,特別是JavaFX。這個學期我的導師似乎有些不合情理。 – Psychobagger
「根」指的是場景圖的根節點,即在場景中顯示的節點。 [Oracle教程](http://docs.oracle.com/javase/8/javafx/scene-graph-tutorial/scenegraph.htm#JFXSG107)用「示例」描述了「場景圖」術語。 (FWIW,聲稱你在掙扎,因爲你的教練不好,不會在這裏得到你的同情。我們許多人,如果不是大多數人,都來自一個你不得不自學的時代;而這個網站的主要觀衆是沒有人教他們的奢侈專業程序員。) –