레이블과 VBox 만있는 간단한 컨트롤이 있습니다. 목적은 프로그램에서 사물을 사용자에게 알려주는 것입니다. 레이블을 장면과 적절하게 비율을 맞출 수 있도록 만들고 싶습니다.JavaFX : 장면/스테이지/창에서 컨트롤을 조절하는 적절한 방법은 무엇입니까?
public void reScaleX(){
this.Message.setScaleX((//Message is the Label Variables name.
this.getWidth() - 40 //40 is the 20 + 20 padding given to the control.
)/this.Message.getBoundsInLocal().getWidth()
);
}
public void reScaleY(){
this.Message.setScaleY((
this.getHeight() - 40 //40 is the 20 + 20 padding given to the control.
)/this.Message.getBoundsInLocal().getHeight()
);
}
내가 초기화 방법의 컨트롤 너비 및 높이 속성에 리스너를 추가합니다 :
@Override public void initialize(URL location, ResourceBundle resources){
this.widthProperty().addListener((
ObservableValue<? extends Number> obsV, Number oldV, Number newV
) -> this.reScaleX());
this.heightProperty().addListener((
ObservableValue<? extends Number> obsV, Number oldV, Number newV
) -> this.reScaleY());
}
그러나 문제는 내가 (어쨌든 내 생각)이 작업을 수행하는 장소의 방법이 그것이 이상하게 행동하는 것입니다 (때로는 재조정 될 것이고, 그렇지 않을 경우 다른 것). 또한 컨트롤이 컨트롤의 크기를 조정 때 재조정하기 위해 배치되고있는로 스테이지의 높이와 너비 속성에 리스너를 추가하려고했습니다 :
this.PreviewStage.widthProperty().addListener((
ObservableValue<? extends Number> obsV, Number oldV, Number newV
) ->
this.PreviewPlaque.reScaleX()
); this.PreviewStage.heightProperty().addListener((
ObservableValue<? extends Number> obsV, Number oldV, Number newV
) ->
this.PreviewPlaque.reScaleY()
);
하지만 여전히 제대로 작동하지 것.
나는이 일을 잘못하고있는 것처럼 느낀다. 그러나 나는 그 일을 올바르게하는 법을 모른다. 이런 식으로 컨트롤을 다시 스케일하는 적절한 방법은 무엇입니까? 내가 찾고있는 결과를 얻기위한 더 좋은 방법이 있습니까?
관련 항목 : [javafx 자동 크기 조정 및 버튼 패딩] (http://stackoverflow.com/questions/23229149/javafx-automatic-resizing-and-button-padding), [JavaFX 전체 화면 (크기 조정)] (http : //stackoverflow.com/questions/16606162/javafx-fullscreen) 및 [JavaFX correct scaling] (http : // stackoverflow.com/questions/16680295/javafx-correct-scaling) – jewelsea