2016-11-06 6 views
0

Есть другие учебники по таким, но они не в очень основных образом. Большинство из них имеют другие аспекты, которые делают новичков, как я, труднее понять ...Как отображать различные файлы fxml на сцене для сценариста? Переключение сцены?

Как переключить сцены или файлы FXML на сцену с помощью кнопки?

Main.Java Класс

package application; 
 
\t 
 

 
import javafx.application.Application; 
 
import javafx.fxml.FXMLLoader; 
 
import javafx.scene.Parent; 
 
import javafx.scene.Scene; 
 
import javafx.stage.Stage; 
 

 
public class Main extends Application { 
 

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

 
    @Override 
 
    public void start(Stage primaryStage) throws Exception{ 
 
     Parent root = FXMLLoader.load(getClass().getResource("Screen 1.fxml")); 
 
     primaryStage.setTitle("Hello World"); 
 
     primaryStage.setScene(new Scene(root, 300, 275)); 
 
     primaryStage.show(); 
 
    } 
 

 

 
}

Controller.java Класс

package application; 
 

 
import javafx.fxml.FXMLLoader; 
 

 
public class Controller { 
 

 
\t public void goToScreen2(){ 
 
\t \t System.out.println("Going to screen2"); 
 
\t \t 
 
\t \t 
 
\t \t 
 
\t } 
 
\t 
 
\t public void goToScreen1(){ 
 
\t \t System.out.println("Going to screen1"); 
 
\t \t 
 

 

 
\t \t 
 
\t \t 
 
\t } 
 
}

экрана 1 FXML файл

<?xml version="1.0" encoding="UTF-8"?> 
 

 
<?import javafx.scene.control.*?> 
 
<?import java.lang.*?> 
 
<?import javafx.scene.layout.*?> 
 
<?import javafx.scene.layout.AnchorPane?> 
 

 
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller"> 
 
    <children> 
 
     <Button layoutX="203.0" layoutY="132.0" mnemonicParsing="false" onAction="#goToScreen2" text="Go to screen 2" /> 
 
    </children> 
 
</Pane>

экран 2 FXML файл

<?xml version="1.0" encoding="UTF-8"?> 
 

 
<?import javafx.scene.control.*?> 
 
<?import java.lang.*?> 
 
<?import javafx.scene.layout.*?> 
 
<?import javafx.scene.layout.AnchorPane?> 
 

 

 
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller"> 
 
    <children> 
 
     <Button layoutX="248.0" layoutY="116.0" mnemonicParsing="false" onAction="#goToScreen1" text="Go to screen 1" /> 
 
    </children> 
 
</Pane>

ответ

1

контроллеры Магазин в приложении, и шоу связанных компонентов.

Main.Java Класс

public class Main extends Application { 
    public Controller controller1; 
    public Controller controller2; 
    private Stage primaryStage; 

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

    @Override 
    public void start(final Stage primaryStage) throws IOException { 
     this.primaryStage = primaryStage; 

     controller1 = load("Screen 1.fxml"); 
     controller2 = load("Screen 2.fxml"); 

     primaryStage.setTitle("Hello World"); 
     controller1.goToScreen1(); 
     primaryStage.show(); 
    } 

    public Controller load(final String name) throws IOException { 
     final FXMLLoader loader = new FXMLLoader(getClass().getResource(name)); 
     loader.load(); 
     final Controller controller = loader.getController(); 
     controller.configure(this, new Scene(loader.getRoot())); 
     return controller; 
    } 

    public void show(final Scene scene) { 
     primaryStage.setScene(scene); 
    } 
} 

Controller.java Класс

public class Controller { 
    private Main application; 
    private Scene scene; 

    public void configure(final Main application, final Scene scene) { 
     this.application = application; 
     this.scene = scene; 
    } 

    public void show() { 
     application.show(scene); 
    } 

    public void goToScreen2() { 
     application.controller2.show(); 
    } 

    public void goToScreen1() { 
     application.controller1.show(); 
    } 
} 
+0

Что-то не так с линии 36 в основной –

+0

Вызванный: java.lang.NullPointerException \t при применении. Main.load (Main.java:36) \t at application.Main.start (Main.java:25) –

+0

this "controller.configure (this, loader.getRoot())" –

 Смежные вопросы

  • Нет связанных вопросов^_^