2016-04-12 38 views
0

2 farklı ekrana sahibim, ilk ekranda kullanıcı görüntüleri yükleyebilir ve diğeri sadece tek bir düğme (sahne görünmez, bu nedenle sahne ekrandan farklı olmak zorundadır) 1) ilk aşamaya geri dönmek için kullanılır. Sorun, ekran 2'den ekran 1'e geri döndüğümde görüntüleri nasıl saklayacağımı bilmiyorum (2. aşamaya gittiğimde aşama 1'i gizliyorum). Bu benim her iki ekranda da geçerli yöntemim.Dinamik ekranı birden çok aşamalı olarak depolayın

static Stage primaryStage; 

@FXML 
private void goToScreen1(ActionEvent event) throws Exception{ 


    Stage stage = (Stage) showStage.getScene().getWindow(); 
    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/sample.fxml")); 
    Parent root = fxmlLoader.load(); 

    if(primaryStage==null) 
    primaryStage = new Stage(); 

    primaryStage.setResizable(true); 
    primaryStage.setOpacity(0.0); 
    primaryStage.show(); 

    primaryStage.setX(0); 
    primaryStage.setY(0); 
    primaryStage.setHeight(primScreenBounds.getHeight()); 
    primaryStage.setWidth(primScreenBounds.getWidth()/2); 

}

cevap

1

Sen sahne içeriğe ilişkin başvuru depolamak var, yani gerek yok: primaryStage "kullanıcı görüntüleri yükleyebilirsiniz" nerede ise

@FXML 
private void goToScreen1(ActionEvent event) throws Exception{ 


     Stage stage = (Stage) showStage.getScene().getWindow(); 
     FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/sample.fxml")); 
     Parent root = fxmlLoader.load(); 

     Stage primaryStage = new Stage(); 

     primaryStage.setResizable(true); 
     primaryStage.setOpacity(0.0); 
     primaryStage.show(); 

     primaryStage.setX(0); 
     primaryStage.setY(0); 
     primaryStage.setHeight(primScreenBounds.getHeight()); 
     primaryStage.setWidth(primScreenBounds.getWidth()/2); 
} 
+0

Bu müthiş, iyi çalışıyor evre geçmek için mainController depolar ve senin alt kontrol etmek bir EventHandler sağlamaktır !! Çok teşekkürler! –

0

do yeniden takın. Bir olasılık

public interface ScreenController { 
     void setOnSwitchStage(EventHandler<ActionEvent> handler); 
} 

public class Screen1Controller implements Initializable, ScreenController { 

    @FXML 
    private Button btnSwitchScreen 

    public Screen1Controller() { 
    } 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
    } 

    @Override 
    public void setOnSwitchStage(EventHandler<ActionEvent> handler) { 
     btnSwitchScreen.setOnAction(handler); 
    } 
} 

public class YourApp extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     Stage secondaryStage = new Stage(); 

     initScreen(primaryStage, secondaryStage, "screen1.fxml"); 
     initScreen(secondaryStage, primaryStage, "screen2.fxml"); 

     primaryStage.show(); 
    } 

    private void initScreen(Stage parentStage, Stage nextStage, String resource) throws IOException { 
    FXMLLoader loader = new FXMLLoader(getClass().getResource(resource)); 
    Scene scene = new Scene(loader.load()); 
    parentStage.setScene(scene); 

    ScreenController screenController = loader.getController(); 
    screenController.setOnSwitchStage(evt -> { 
     nextStage.show(); 
     parentStage.hide(); 
    }); 
} 

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