티스토리 뷰
<fx:root>
란
- JavaFX 2.2에 새로 추가된 .fxml 파일 작성 사용하는 root Tag이다.
<fx:root type="javafx.scene.control.TextArea" fx:id="editor" prefWidth="500" prefHeight="400" xmlns:fx="http://javafx.com/fxml"/>
contents...
</fx:root>
<fx:root>
를 사용하게 되면 FXML로 재사용 가능한 컴포넌트를 작성하는 데 도움을 준다고 한다.
재사용성?
-
예를 들어,
HBox
안에TextField
와Button
이 들어 있는 컨포넌트를 작성한다고 해보자.(fx:root
사용 하지 않고)- 그럼 아래와 같이 작성할 수 있을 것이다.
VBox vbox = new VBox(); vbox.getChildren().add(new MyComponent());
- 그리고
MyComponent
Java Class는 아래와 같이 작성할 것이다.
public class MyComponent extends HBox { private TextField textField ; private Button button ; public MyComponent() { textField = new TextField(); button = new Button(); this.getChildren().addAll(textField, button); } }
- 대응되는 FXML 코드는 아래와 같이 작성할 수 있을 것이다.
<HBox> <TextField fx:id="textField"/> <Button fx:id="button" /> </HBox>
-
이때 발생할 수 있는 문제는 FXML 자체도 일종의
Node
이고,MyComponent
클래스 자체도Node
라는 것이다.- 이해하기 어려울 것이다, 아래 코드를 보자
public class MyComponent extends HBox { @FXML private TextField textField ; @FXML private Button button ; public MyComponent() { try { FXMLLoader loader = new FXMLLoader(getClass().getResource("MyComponent.fxml")); loader.setController(this); //FXML 자체가 HBox 노드 인 것이다! HBox hbox = loader.load(); this.getChildren().add(hbox); } catch (IOException exc) { // handle exception } } }
- 위 코드의 결과는
TextField
,Button
을 감싸는HBox
를 감싸는HBox
로 구성된 MyComponent가 생성됨- 그 이유는 FXML Root의
Node
와 이를 구성하는 클래스의 Node가 필요하기 때문임
- 그 이유는 FXML Root의
-
<fx:root>
를 한번 써보자.-
<fx:root>
는Node
를 컴포넌트 (Java 클래스)로 작성하고 FXML의 루트를 컴포넌트의 노드로 사용하도록 지시하는 매커니즘<fx:root type="javafx.scene.layout.HBox"> <TextField fx:id="textField" /> <Button fx:id="button" /> </fx:root>
-
컴포넌트 코드를 작성 해보면
public class MyComponent extends HBox { @FXML private TextField textField ; @FXML private Button button ; public MyComponent() { try { FXMLLoader loader = new FXMLLoader(getClass().getResource("MyComponent.fxml")); loader.setController(this); loader.setRoot(this); loader.load(); } catch (IOException exc) { // handle exception } } }
-
-
결과적으로 MyComponent는 FXML과 Java 클래스와 대응되어 사용할 수 있게 된다.
-
이에 더하여, MyComponent는 다른 FXML에서도 사용할 수 있게 되어 UI의 계층 구조를 형성할 수 있다.
결론
-
앞으로 FXML의 루트는
fx:root
로 작성하자
참고
끝으로
이 글이 도움이 되었다면, 하단의 Google 광고 👎👎👎 한번씩 클릭 부탁 드립니다. 🙏🙏🙏
광고 클릭은 많은 힘이 됩니다!
반응형
'프로그래밍 > JavaFX' 카테고리의 다른 글
[JavaFX] JavaFX UI Test Code 작성 방법 (0) | 2020.03.14 |
---|---|
[JavaFX] 실시간 업데이트 되는 Timer(시계) 컨트롤 구현 방법 (0) | 2020.03.14 |
(JavaFX) JavaFX 애니메이션 사용법 (0) | 2020.02.01 |
[JavaFx] Tray Icon에 메뉴 추가 방법 (Tray Menu 사용법) (1) | 2019.11.16 |
[JavaFx] Tray Icon 전시 방법 (0) | 2019.11.16 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- JavaFX Table View
- 일본 여행
- 텐트
- JavaFX 테이블뷰
- 이펙티브자바
- TableView
- effectivejava
- 스프링부트
- java
- 인텔리제이
- Java UI
- intelij
- 자전거 여행
- effective java
- 이펙티브 자바
- windows
- 배낭 여행
- 방통대 과제물
- 일본여행
- 자바
- git
- JavaFX 종료
- JavaFX Window Close
- 배낭여행
- 자전거
- JavaFX
- 일본 배낭여행
- 일본 자전거 여행
- springboot
- 이펙티브
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함