본문 바로가기
2023년 이전/kotlin-TornadoFx

TornadoFx - How Builders Work

by JeongUPark 2019. 10. 10.
반응형

[출처 - 이 글은 tornadofx-guide르 통해 공부한 내용을 정리한 글입니다. 더 정확한 내용은 https://edvin.gitbooks.io/tornadofx-guide/part1/4.%20Basic%20Controls.html 에서 확인 하실 수 있습니다.]

 

kotlin에서 제공하는 block function을 이용하여 button이 있는 vbox를 작성해 보겠습니다.

 

class with_apply_view : View(){

    override val root = vbox()
    init {
        with(root){
            this += Button("Press Me").apply {
                textFill = Color.RED
                action { println("Button pressed!") }
            }
        }
    }
}

위 code를 보면 

button을 생성 -> button 변형 (text 색깔 및 action) -> 부모에 추가(여기서는 vbox 입니다.) 순으로 동작을 하게됩니다.

 

위의 3단계는 TornadoFX의 가장 일반적인 단계인데 이 단계를 button으로 간략하게 할 수 있습니다. (Button과 button은 다릅니다. Button은 import javafx.scene.control.Button 이고 button은 import tornadofx
import tornadofx.Stylesheet.Companion.button 입니다.)

 

class with_apply_view : View(){

    override val root = vbox()
    init {
        with(root){
            button("Press Me"){
                textFill = Color.RED
                action { println("Button pressed!") }
            }
        }
    }
}

button을 씀으로써 this+=와 apply가 사라졌습니다.

어떻게해서 Button대신 button을 사용하면 이렇게 간략해지는 걸까요?

vBox(또는 다른 targetable component)에는 button이라는 확장 요소가 있고, 이 요소는 텍스트 인수와 버튼을 대상으로하는 optional closure 를 허용합니다.

(code 상으로는 source code에서 확인 할 수 있습니다.)

 

이런 방식으로 code를 작성하면

class with_apply_view : View(){

    override val root = vbox {
        button("Press Me") {
            textFill = Color.RED
            action { println("Button pressed!") }
        }
    }
}

그 결과는 다음과 같습니다.

Press Me를 누르면 console에 

라는 결과가 나옵니다.

 

이런 방식을 이용하여 hbox를 이용한 vbox를  생성할 수 있습니다.

class login_vbox_view : View(){
    var firstNameField: TextField by singleAssign()
    var lastNameField: TextField by singleAssign()

    override val root = vbox {
        hbox {
            label("First Name")
            firstNameField = textfield()
        }
        hbox {
            label("Last Name")
            lastNameField = textfield()
        }
        button("LOGIN") {
            useMaxWidth = true
            action {
                println("Logging in as ${firstNameField.text} ${lastNameField.text}")
            }
        }
    }
}

위 code는 First Name과 Last Name을 입력하면 그 입력값이 console에 나타나느 code 입니다. 

결과는 다음과 같습니다.

 

반응형

'2023년 이전 > kotlin-TornadoFx' 카테고리의 다른 글

TornadoFx - Data Controls(1)  (0) 2019.10.10
TornadoFx - Builders for Basic Controls  (0) 2019.10.10
TornadoFx - Accessing  (0) 2019.10.07
TornadoFx - replaceView , passParameter  (0) 2019.10.07
TornadoFx - Fragment  (0) 2019.10.07