2016-08-10 6 views
0

오늘 나는 어떤 문제를 겪었습니다. 왜 그런 식으로 써야하는지 설명 해줄 수 있습니다.JavaFx : 장면 전환 (학부모 이슈)

Parent parent = FXMLLoader.load(getClass().getResource("/fxmlFiles/MainScreen.fxml")); 
Scene MainScene = new Scene(parent); 
Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); 
stage.setScene(MainScene); 
stage.show(); 

이 코드의 세 번째 줄 (장면 전환)에 대해 묻고 싶습니다. 먼저 Stage으로 전송 된 다음 Node으로 전송되는 이유는 무엇입니까?

왜 우리는 방법으로 다음을 쓸 수 없습니다 :

Parent parent = FXMLLoader.load(getClass().getResource("/fxmlFiles/MainScreen.fxml")); 
Scene MainScene = new Scene(parent); 
Stage stage = new Stage(scene); 
stage.setScene(MainScene); 
stage.show(); 

Parent 오른쪽 단지 종류의 FXML 파일에서 제공하는 레이아웃입니다? 이 exacly 무엇인지 설명해주십시오없는 경우 : P

+0

그 이벤트가 호출되는 것을보고 싶지만 장면을 전환하는 매우 지나치게 복잡한 방법입니다. 같은 스테이지를 유지한다면 무대 위의 장면을 전환하면됩니다. 새로운 무대를 원하면 두 번째 방법을 사용하십시오. – Dominic

답변

1

왜 단계에서 다음 노드 개체에 먼저 주조 할 필요가?

그런 일은 일어나지 않습니다. 괄호를보세요. event.getSource()을 호출하고 그 결과를 Node으로 전송 중입니다. 그런 다음 결과로 SceneNode, getWindow(), getScene()을 호출하고 에 Window을 캐스팅합니다.

Object source = event.getSource(); 
Node node = (Node) source ; 
Scene scene = node.getScene(); 
Window window = scene.getWindow(); 
Stage stage = (Stage) window ; 

왜 우리가 방법 fllowing을 쓸 수 없습니다 :

코드가 동일합니다

다른 무언가를
Parent parent = FXMLLoader.load(getClass().getResource("/fxmlFiles/MainScreen.fxml")); 
Scene MainScene = new Scene(parent); 
Stage stage = new Stage(scene); 
stage.setScene(MainScene); 
stage.show(); 

; 기존 스테이지에 장면을 설정하는 대신 새로운 Stage을 만듭니다. 원하는 실제 기능과 일치하는 코드를 사용하십시오.

+0

오키, 이해합니다. 그렇다면 event.getSource() 함수를 사용하면 어떤 유형의 데이터를 얻을 수 있습니까? 왜 우리는 강제로 캐스팅을 사용합니까? – Michael

+0

[Javadocs] (https://docs.oracle.com/javase/8/docs/api/java/util/EventObject.html?is-external=true#getSource--)를 읽으십시오. 'getSource'는'Object'를 리턴합니다; 즉, 소스는 임의의 객체 일 수있다. –

+0

오키, 이제 혼란 스러워요. P. "노드는 프리젠 테이션 객체로서 동작, 속성 및 지역화 된 표시 이름을 가지며 아키텍처가 사람과 만나는 장소입니다. 일반적으로 노드는 일부 모델 객체를 감싸고 사람이 읽을 수있는 이름, 아이콘 등을 제공합니다. 그래서 노드가 진정으로 Object이기도하면 Object를 Object로 캐스팅해야하는 이유는 무엇입니까? (이해가 안됩니다.) – Michael