2015-01-07 2 views
0

윈도우/스테이지와 TextArea가 TextArea 내부의 텍스트 길이에 따라 크기가 조정됩니다 (텍스트가 줄 바꿈 됨). 이것은 윈도우가 작을수록 TextArea 내부의 텍스트가 적음을 의미합니다. TextArea의 폭이 지정됩니다. TextArea의 높이를 계산하려면 텍스트의 길이, TextArea의 지정된 너비 및 줄 높이를 사용합니다. 예 :JavaFX : TextArea 줄 높이 가져 오기

이중 높이 = textwidth/agreement.getWidth() * 18;

이 경우 줄 높이는 정적 값으로 정의됩니다. 그러나 줄 크기는 CSS 파일의 정의에 따라 달라야합니다. 글꼴 크기의 정의가 변경되면 줄 높이가 변경되기 때문입니다. 따라서 정적 값 대신에 TextArea의 선 높이를 결정해야합니다. 그렇다면 어떻게 TextArea의 선 높이를 얻을 수 있습니까? 무대가 표시되면

+0

인가 스크롤하지 않고 모든 텍스트를 포함 할 수있는 높이로 높이를 설정하여 TextArea에서 세로 스크롤 막대를 제거 할 때의 문제점은 무엇입니까? – javaHunter

+0

아니요, 스크롤바는 중요하지 않습니다. textArea가 큰 경우 (스크린 크기의 절반보다 큰 경우) 사용할 수 있습니다. TextArea가 스크린 크기의 절반보다 작 으면 TextArea가 텍스트의 높이를 가져야합니다. 다른 경우에는 스크롤바가 TextArea 내에서 사용하는 화면의 절반 높이가 있습니다 – Bine

답변

2

당신은 텍스트 영역에 렌더링 된 텍스트의 정확한 크기를 찾을 수 있습니다 : 그 차원을 기반으로

@Override 
public void start(Stage primaryStage) { 
    TextArea area = new TextArea("This is some random very long text"); 
    area.setWrapText(true); 
    area.setPrefWidth(200); 
    area.setMaxWidth(200); 
    area.setStyle("-fx-font: 18pt Arial"); 
    StackPane root = new StackPane(area); 

    Scene scene = new Scene(root, 300, 250); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 

    Text t = (Text)area.lookup(".text"); 
    System.out.println("LayoutX "+t.getLayoutX()); 
    System.out.println("LayoutY "+t.getLayoutY()); 
    System.out.println("Width: "+t.getBoundsInLocal().getWidth()); 
    System.out.println("Height: "+t.getBoundsInLocal().getHeight()); 
} 

, 당신은 당신의 계산을 수행 할 수 있습니다.

편집

스테이지를 표시하기 전에 크기를 얻을 수 있습니다,하지만 당신은 루트 및 어린이에 CSS 스타일을 적용하고 현장에 레이아웃을 강제해야

Scene scene = new Scene(root, 300, 250); 

    root.applyCss(); 
    root.layout(); 

    Text t = (Text)root.lookup(".text"); 
    System.out.println("LayoutX "+t.getLayoutX()); 
    System.out.println("LayoutY "+t.getLayoutY()); 
    System.out.println("Width: "+t.getBoundsInLocal().getWidth()); 
    System.out.println("Height: "+t.getBoundsInLocal().getHeight()); 

    // Now calculations can be performed 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
+0

이것이 작동합니다, 감사합니다 :) 스테이지가 표시되지 않은 경우 솔루션을 알고 있습니까? 지금은 솔루션을 사용하고 있는데 처음으로 보여지는 즉시 (좋은 방법은 아니지만 작동합니다.)) 단계를 즉시 숨 깁니다. 이 후 textArea의 높이를 사용하여 스테이지의 크기를 다시 계산하고 해당 스테이지를 다시 표시합니다. – Bine

+0

예, 올바른 대답으로 편집했습니다. –

+0

수정 해 주셔서 감사합니다. 그 해결책을 시도했지만 .applyCss()가 정의되지 않았다는 오류가 발생합니다. StackPane, AnchorPane, 장면에 적용할지 여부는 중요하지 않습니다 ... JavaFX 8에서 작동하는지 여부는 가능합니까?) JavaFX 8 이후 모든 것을 구현합니다. – Bine