Programing/JavaFX

JavaFX + SceneBuilder TextFlow 스크롤 추가 및 포커스 설정

리커니 2019. 10. 29.
반응형

 

JavaFX + SceneBuilder TextFlow 스크롤 추가 및 포커스 설정

 

Textarea와 기능은 같지만, Textarea 가 text의 속성을 변경 할 수 없기 때문에

TextFlow를 사용합니다. (아래 Link 참조)

 

Link : JavaFX Text style 변경 TextArea, TextFlow

 

JavaFX Text style 변경 TextArea, TextFrow

JavaFX Text style 변경 TextArea, TextFrow 결론부터 말씀드리면 TextArea의 Text 속성은 변경이 안됩니다. public void appendLog(String log){ Text t1 = new Text(log); t1.setStyle("-fx-fill: RED;-fx-font-..

aljjabaegi.tistory.com

하지만 TextFlow 는 자동스크롤 및 포커스 설정이 안되기 때문에 따로 설정을 해주셔야 하는데요,

이를 위해 SceneBuilder로 이동합니다.

TextFlow 위에서 마우스 오른쪽 클릭 > Wrap in > ScrollPane 을 선택합니다.

 

 

그러면 아래와 같은 구조가 됩니다.

 

 

ScrollPane이 TextFlow를 감싸는 구조가 되는데요, 이렇게 되어야 TextFlow에 Text가 size이상 추가될 때 스크롤이 동작하게 할 수 있습니다.

추가가 되었으면 Layout을 아래와 같이 맞춰 줍니다.

 

 

Pref Width, Height 는 TextFlow와 같게 설정하였습니다. Fit To Width, Height 체크, LayoutX, Y를 1 만큼 설정해줍니다.

무엇이 변하는지는 값을 바꿔가면서 확인해보세요.

 

이제 TextFlow에 Text 가 추가되면서 사이즈를 넘어가게 되면 스크롤이 생깁니다.

하지만 최하단으로 포커스가 이동되진 않습니다.

 

이를 위한 코드를 추가해줍니다.

 

public static void printLogger(String msg) {
	Platform.runLater(new Runnable() {
		@Override
		public void run() {
			LOGGER.info(msg);
			nomalTf.getChildren().add(new Text(getTime()+msg+"\n"));
			scrollPane.vvalueProperty().bind(nomalTf.heightProperty());
		}
	});
}

 

코드를 보시면 scrollPane의 vvalue에 textFlow의 heightProperty 를 bind 하고 있습니다.

Text가 TextFlow에 추가되고, 그 높이값을 수직설정값에 적용하면서 포커스를 최하단으로 움직이게 됩니다.

 

 

반응형

댓글

💲 추천 글