2014-04-14 14 views
2

VBox 안에 회전 된 오브젝트를 넣는 프로그램이 있습니다. VBox에서 회전을 기준으로 세로 크기를 조정해야합니다. 다음 예에서 텍스트 개체를 만지지해야VBox (또는 HBox) 내부의 회전 된 오브젝트

enter image description here

그러나 그들은 않습니다. 이를 생성하는 코드는 다음과 같습니다 :

이 구성에서
package metcarob.com.soavisualise; 

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.layout.StackPane; 
import javafx.scene.layout.VBox; 
import javafx.scene.text.Text; 
import javafx.stage.Stage; 

public class TestAppForRotate extends Application { 

@Override 
public void start(final Stage primaryStage) throws Exception { 

    Group root = new Group(); 
    Scene scene = new Scene(root); 

    primaryStage.setScene(scene); 

    VBox vbox = new VBox(); 
    root.getChildren().add(vbox); 

    Group g = null; 
    Text t = null; 
    StackPane p = null; 

    for (int c=0;c<3;c++) { 
     g = new Group(); 
     t = new Text("Test " + Integer.toString(c)); 
     p = new StackPane(); 
     p.getChildren().add(t); 
     p.setStyle("-fx-background-color: white; -fx-border-color: orange; -fx-border-width: 3;"); 
     g.getChildren().add(p); 
     g.setRotate(c * 35); 
     vbox.getChildren().add(g); 
    } 

    primaryStage.show(); 
} 

public static void main(String[] args) { 
    launch(args); 
} 
} 

내가 전체 그룹이 예에서 나는 회전 오렌지 박스가 필요합니다 (회전과 중 VBOX 에 추가 그룹 내부 StackPane 내부 텍스트를 텍스트뿐만 아니라)

이 방법을 사용하는 방법에 대한 아이디어가 있으십니까? 로버트

답변

2

회전 된 노드를 회전하지 않은 그룹으로 감싸십시오.

vbox.getChildren().add(new Group(g)); 

spacing

이 작동하는 이유는 Group javadoc에서입니다 :

변환 효과가이 그룹의 아이들에 직접 설정되어있는 경우는, 그이 그룹의 레이아웃 범위에 포함됩니다.

VBox 항목간에 추가 고정 된 공간을 원하면 Rohan의 답변에서 제안한대로 vbox.setSpacing을 사용할 수 있습니다.

0

나는 간격을 설정하는 것이 가장 좋은 방법이라고 생각합니다.

vbox.setSpacing(double arg0); 

동적 인 효과를 얻기 위해 루프의 간격을 조정할 수도 있습니다 (필요한 경우).