2016-12-08 3 views
0

나는 꽤 복잡한 장면 그래프를 가지고있어 크기 조정 문제를 일으켰습니다. 네가 해결하도록 도와 주면 기뻐.JavaFX 자동 크기 조정 그룹

내 루트 노드의 중심이 ListViewBorderPane입니다. ListView의 각 셀은 다음과 같이 사용자 정의 줌이 ScrollPane으로 가득 :

public class ZoomableScrollPane extends ScrollPane { 

    Group zoomGroup; 
    Scale scaleTransform; 
    LineChart<Number , Number> content; 
    double scaleValue = 1.0; 
    double delta = 0.1; 

    public ZoomableScrollPane(LineChart<Number , Number> content, double height) { 
     this.content = content; 
     this.setPrefHeight(height); 
     Group contentGroup = new Group(); 
     zoomGroup = new Group(); 
     contentGroup.getChildren().add(zoomGroup); 
     zoomGroup.getChildren().add(content); 
     setContent(contentGroup); 
     scaleTransform = new Scale(scaleValue, scaleValue, 0, 0); 
     zoomGroup.getTransforms().add(scaleTransform); 

    } 
} 

ZoomableScrollPane의 내부 LineChart이 볼 수 있듯이. 이 차트로 두 가지 일을하고 싶습니다. 첫째, 어떻게하면 창 레이아웃의 경우 원하는 크기의 결과를 얻기 위해 루트 레이아웃에 너비를 바인딩하고 (확대/축소는 문제가되지 않음) 두 번째로 버튼을 누를 때마다 런타임에 차트의 너비를 변경합니다.

public void handleButton(ActionEvent actionEvent) { 
    MainController.lineChart1.setPrefWidth(MainController.lineChart1.getPrefWidth() + CONSTANT); 
} 

여기서 문제는 입니다. 그룹 (안 창)의 자식 인 LineChart 원인, 그냥 사이즈 변경의 한 가지 방법을 알고 그 같은 루트 BorderPane의 수동을 폭을 바인딩 입니다 :

MainController.lineChart1.prefWidthProperty().bind(fourChannels.widthProperty().subtract(40)); 

그리고이 경우 LineChart의 너비를 실행 시간으로 변경할 수없고 A bound value cannot be set 예외가 발생합니다.

난 하나의 솔루션을 어떻게 든 수동 바인딩의 필요성을 피하기 위해 ZoomableScrollPane 클래스를 개정 수 있지만 정말 어떻게 해야할지 모르겠다.

이 문제에 대한 도움을 주시면 대단히 감사하겠습니다.

+0

중복 : [JavaFX correct scaling] (http://stackoverflow.com/questions/16680295/javafx-correct-scaling)? – jewelsea

+0

@jewelsea 스케일링에 관한 것이 아닙니다. 자동 크기 조정 그룹을 갖는 방법이나 런타임에 바운드 폭을 늘리는 방법을 모르십시오. –

답변

0

당신은 속성이 바인딩 된 경우 감지하고 그것을 조작하기 전에 바인딩을 해제 할 수 있습니다 : 당신이 차트를 확대하고 창 내용이 이미 뷰포트보다 큰 것입니다 크기를 조정할 때 아마도

if (content.prefWidthProperty().isBound()) { 
    content.prefWidthProperty().unbind(); 
} 
... 

을 , 윈도우의 크기가 확대 된 차트의 크기를 초과하여 크기가 조정될 때까지 너비가 강제로 변경되지 않아야합니다.

서로 다른 조건이 주어지면 BorderPane/ListView의 크기를 모니터링하는 것이 더 좋을 수 있으며 변경 사항이 필요할 때 차트의 크기를 조정하는 것이 좋습니다.