2016-11-22 6 views
4

UI 화면을 login.fxml에서 home.fxml으로 변경하고 싶습니다.JavaFX : UI 화면 간 이동을위한 우수 사례

Stage 또는 Scene을 변경해야합니까? 가장 좋은 방법이 무엇인지 모르겠습니다. 또한 컨트롤러의 핸들러에 람다 식을 사용할 수 있습니까?

+0

[MCVE]를 게시하십시오. – DavidS

+0

지금까지 시도한 것을 알고 싶기 때문에 문제를 보여주는 예제를 요청했습니다. 이것은 몇 가지 소개 자습서를 통해 자신이 대답 할 수 있거나 자신의 입장에서 약간의 문제를 제기 할 수있는 질문입니다. – DavidS

답변

7

먼저 Stage .vs로 시작해 보겠습니다. Scene 문제 : ->Scene ->Nodes (등) Stage : 알려진

JavaFX 계층 구조를 기반으로합니다.

는 여기를 참조하십시오 :

enter image description here이 실질적으로 말하면, A는 어림 내 의견으로는 미래입니다 : 다른에 향후 계획이라면

  • 프로그램의 흐름에서을 입력하십시오 (예 : 로그인 -> 프로파일). Stage을 변경하십시오. 같은 환경에있는 경우

  • 는 (처음으로 로그인 -> 여러 잘못된 시도 후 로그인 참조) - Scene을 변경합니다. 람다에 관해서는

는 : 현재 Java/JavaFX 버전의 abillity가있는 경우 Ahhmmm ... - 사용하지 않을 이유가 없다. Java 8의 컨트롤러 처리기에 대한 자세한 내용은 great tutorial을 참조하십시오.

+0

감사합니다. 나중에 JavaFX에 익숙해지면 나중에 람다를 시작하고 구현할 때 Old-School 버전을 사용하도록 할 것입니다. –

0

내가 JavaFX에서 변화하는 장면이 방법을 사용

/** 
* Controller class for menuFrame.fxml 
*/ 
public class MenuFrameControl implements Initializable { 

    @FXML private Button sceneButton1; 
    @FXML private Button sceneButton2; 
    @FXML private Button sceneButton3; 

    /** 
    * Event handling method, loads new scene from .fxml file 
    * according to clicked button and initialize all components. 
    * @param event 
    * @throws IOException 
    */ 
    @FXML 
    private void handleMenuButtonAction (ActionEvent event) throws IOException { 
     Stage stage = null; 
     Parent myNewScene = null; 

     if (event.getSource() == sceneButton1){ 
      stage = (Stage) sceneButton1.getScene().getWindow(); 
      myNewScene = FXMLLoader.load(getClass().getResource("/mvc/view/scene1.fxml")); 
     } else if (event.getSource() == sceneButton2){ 
      stage = (Stage) flightBtn.getScene().getWindow(); 
      myNewScene = FXMLLoader.load(getClass().getResource("/mvc/view/scene2.fxml")); 
     } else if (event.getSource() == sceneButton3) { 
      stage=(Stage) staffBtn.getScene().getWindow(); 
      myNewScene = FXMLLoader.load(getClass().getResource("/mvc/view/scene3.fxml")); 
     } 

     Scene scene = new Scene(myNewScene); 
     stage.setScene(scene); 
     stage.setTitle("My New Scene"); 
     stage.show(); 
    } 

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

그래서 기본적으로이 버튼을 클릭하면, 그것은 stage 변수에 Stage 객체를 표시 실제로 저장합니다. 그런 다음 Scene 개체를 .fxml 파일에서 myNewScene 변수로로드 한 다음 새로로드 된 Scene 개체를 저장된 Stage 개체에 넣습니다.

이 코드를 사용하면 하나의 Stage 개체를 사용하여 각 단추가 다른 장면으로 전환되는 기본 3 개의 단추 메뉴를 만들 수 있습니다.