2017-11-07 3 views
0

두 번째 행동에 대한 텍스트를 변경해야합니다 Pane. 그걸 사용하려고 시도 :JavaFX의 기존 창에서 컨트롤러에 액세스하는 방법은 무엇입니까?

try{ 
    HouseDA.setDefault(house); 

    FXMLLoader loader = new FXMLLoader(); //Loads an object hierarchy from an XML document. 
    loader.setLocation(MainApp.class.getResource("view/MainSideMenu.fxml")); // which document 
    loader.load(); 

    MainSideMenuController controller = loader.<MainSideMenuController>getController(); 
    controller.refreshHouseInfo(); 

    }catch(Exception e){} 

코드는 완벽하게 작동하지만 텍스트는 변경되지 않습니다. 디버깅 후 내 Pane의 다른 인스턴스를 만들고 거기에 텍스트가 변경된 것처럼 보입니다. 기존 창이있는 컨트롤러에 액세스하여 텍스트를 바꿀 수 있습니까?

+0

[이 질문] (https://stackoverflow.com/questions/47156903/accessing-fx -control-then-call-method-updates-the-label-text-issue), UI 요소를 생성하는 FXML을 (loader.load()를 통해)로드하지만, 그렇게하면 아무데도 표시되지 않습니다. 결과적으로 UI를 변경하는 컨트롤러의 메서드를 호출 할 때 아무 것도 볼 수 없습니다 (표시되지 않는 텍스트의 텍스트가 변경됨). –

+0

* "기존 Pane의 컨트롤러에 어떻게 액세스 할 수 있습니까?"* FXML 파일에서 창을로드 (및 표시) 할 때 컨트롤러를 가져옵니다. 그런 다음 컨트롤러를 액세스해야하는 사람에게 전달하십시오. 어쩌면 https://stackoverflow.com/questions/29639881/javafx-how-to-use-a-method-in-a-controller-from-another-controller가 도움이 될 수 있습니다. –

답변

0

귀하의 질문을 undestrood 경우 확실하지 않지만 이것을 시도 할 수 있습니다.

  1. 하나의 FXML 파일을 두 개의 창으로 만듭니다.
  2. 첫 번째 창에서 일부 요소를 만듭니다. (예 : TextArea)
  3. 두 번째 창에서 예를 들어 일부 단추를 만듭니다.
  4. TextArea에주고 Button에 ID를 지정하십시오. (fx : id = "yourID")를 FXML 파일에 저장합니다.
  5. 주 컨트롤러 클래스에 인스턴스를 만듭니다. (TextArea yourTextAreaID, button yourButtonID)

그런 다음 다른 창에서 myTextArea의 내용을 모두 변경할 수 있습니다.

yourButtonID.setOnAction(event -> { 
    yourTextAreaID.setText("something"); 
}); 

사용자가 버튼을 클릭하면 textArea의 두 번째 창에서 텍스트가 "무언가"로 설정됩니다. (당신은 단지 하나 개의 창을 보여주고 싶은 경우는, setVisible으로 관리 할 수 ​​있습니다 (boolValue) 메소드)와 동일하게

mySecondPane.setVisible(false);