티스토리 뷰

StringProperty를 이용해 fxml에서 text 수정가능한 컨트롤 만들기


 이번 시간에는 Custom Control을 fxml상에서 속성을 수정할 수 있게 하는 방법에 대해서 알아보겠습니다. 

 저희는 보통 fxml에서 Text를 수정할 때 아래와 같이 합니다.


1
<Button text="MyButton"/>
cs


 

 그럼 간단하게 Text 를 수정할 수 있습니다. 지금 중점적으로 봐야 할 것은 단순히 fxml에서 Text를 수정할 수 있는게 아니라

 


 fxml 상에서 컨트롤의 속성을 수정할 수 있다는 것입니다. 분명히 필요한 상황이 있습니다. 



 저 같은 경우는 폰트 크기를 fxml에서 유동적으로 조절해야 하는 상황이 발생했습니다. 




 이럴 때는 컨트롤 클래스에서 Property를 만들어주고 fxml에서 수정된 Property를 이용해서 세팅을 해주는 방법을 사용하면 됩니다. 


 방법은 다음과 같습니다.




 1. 컨트롤 클래스 안에 프로퍼티를 만들어줍니다. 


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
  private SimpleIntegerProperty fontSize;
 
    
 
  public SimpleIntegerProperty fontSizeProperty() {
    if (fontSize == null) {
      fontSize = new SimpleIntegerProperty(this"font-size"14) {
        //font-size 라는 이름으로 fxml 에서 수정이 가능합니다. 
      };
    }
    return fontSize;
  }
 
  public void setFontSize(int size) {
    fontSizeProperty().setValue(size);
  }
 
  public int getFontSize() {
    return fontSize == null ? 14 : fontSizeProperty().getValue();
  }
cs


 

2. 설정한 프로퍼티 Name으로 FXML 상에서 수정 해줍니다.



1
<MyCustomControol fx:id="myCustomControl" fontSize="12" ><MyCustomControl/>
cs



3. setter를 이용해서 클래스 상에서 받은 값을 가져와서 처리합니다.


 

이런 형태로 필요한 프로퍼티를 직접 만들어서 사용을 할 수 있습니다. Text 라던지 Size 라던지, 한 번 참고해 보시면 좋을듯 합니다.

반응형
댓글