2014-09-12 4 views
0

장면의 크기 (응용 프로그램의 윈도우)의 크기가 조절되면 그에 따라 윈도우의 내용의 크기를 조정하려고합니다. 나는 지금fxml 로더에서 fxml 컨트롤러의 메서드에 액세스

로더 클래스

public class ResizingButtons extends Application { 

@Override 

public void start(Stage stage) throws Exception { 

    Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml")); 
    Scene scene = new Scene(root); 
    stage.setScene(scene); 
    stage.show(); 
    scene.widthProperty().addListener(new ChangeListener<Number>() { 

     @Override 
     public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { 
      try{ 
      System.out.println("Scene Width Property is " + scene.getWidth()); 
      } 
      catch(Exception e){ 
       System.out.println("Error in width listener of scene" +e.getMessage()); 
      } 
     } 
    }); 
} 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    launch(args); 
    } 
} 

까지했던 내 코드를 게시 한 그리고 이것은 FXMLDocument.fxml의 fxml 클래스

public class FXMLDocumentController implements Initializable { 

@FXML 
public Button btn1; 

@Override 
public void initialize(URL url, ResourceBundle rb) { 
    // TODO 
}  

public void changeBtnSize(){ 
    btn1.setPrefHeight(200); 
    btn1.setStyle("-fx-background-color:red"); 
    } 
} 

의 컨트롤러 인 경우 윈도우의 크기 컨트롤러 클래스의 changeBtnSize() 메서드에 액세스하려고합니다.

답변

1

FXMLLoader에서 컨트롤러 인스턴스를 가져올 수 있습니다. 과 같이 코드를 리팩토링 :

지금
@Override 
public void start(Stage stage) throws Exception { 
    FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDocument.fxml")); // Use loader instance 
    Parent root = loader.load(); 
    FXMLDocumentController controller = loader.getController(); // Now you have controller refference here 
    //add your listener, feel free to use your controller inside listener implementation 
} 
+0

내가 changeListener입니다() 로더 클래스의 방법에서의 fxml 구성 요소에 변화를 만들려고 할 때마다 나는 문제에 직면하고,이 널 (null) 'code'의 scene.widthProperty을 제공합니다 ( } 캐치 (;) .addListener은 (새 ChangeListener의 () { 공공 무효가 변경 @Override는 { 시도 { controller.resizeComponents() (ObservableValue는 관찰, 번호 oldValue입니다, 수 NEWVALUE ) 예외 e) { System.out.println (e.getMessage()); } } }); 'code' – viper

+0

@viper 로더 클래스의 변경 리스너에서 컨트롤러 메소드를 호출하려고했을 때 수신 된 에러 – SimY4

+0

에 대한 세부 정보를 제공하십시오. 프린트 문을 실행하지만 null을 제공합니다. fxml의 구성 요소가 scene.widthProperty().의 addListener (새 ChangeListener의 () { @Override가 공개 무효가 (ObservableValue는 관찰, 번호 oldValue입니다, 수 NEWVALUE) { 시도 { controller.resizeComponents 변경 (); // 컨트롤러는 fxml 컨트롤러의 객체입니다. } // 컨트롤러 코드 public void resizeComponents() { System.out.println ("hi"); acPane.setMinSize (300, 400); } – viper