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

TornadoFx - Fragment

by JeongUPark 2019. 10. 7.
반응형

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

TornadoFx에서 view는 sigleton으로 생성이 됩니다. 이말은 한번에 한개의 view만 생성할 수 있다는 말이됩니다. 

만일 어떤 view를 어떤 parent에 적용 후 다른 parent에 적용하면 이전 parent에서 사라진다는 것을 의미합니다.

 

이런 문제점을 해결하기 위해 Fragment가 사용됩니다. Fragment는 다중 인스턴스로 디자인된 view입니다. 그래서 Fragment는 Popup이나 큰 UI의 일부 UI로 사용할 수 있습니다.

 

그럼 Fragment 사용 법을 보도록 하겠습니다.

class FragmentView : View() {
    override val root = vbox {
        button("Open Model") {
            action {
                find<MyFragment>().openModal(stageStyle = StageStyle.UTILITY)
            }
        }
        button("Open Window"){
            action {
                find<MyFragment>().openWindow(stageStyle = StageStyle.UTILITY)
            }
        }
        button("Open InteralWionw"){
            action {
                openInternalWindow<MyFragment>()
            }
        }
    }
}

class MyFragment : Fragment() {
    override val root = vbox {
        label("This is a popup")
        button("close") {
           action {
               close()
           }
        }
    }
}
class FragmentApp : App(FragmentView::class)

fun main() {
    launch<FragmentApp>()
}

위 코드는 View에 버튼 3개를 적용하고 각 버튼을 눌릴 때마다 Fragment를 호출하며, close 버튼을 눌러 호출한 Fragment를 닫습니다.

3개다 MyFragment를 호출하고 있지만 호출 시 다른 모습을 보여줍니다.

우선 openmodel의 경우 

위와 같이 팝업이 나타납니다. 이때 이 팝을 종료하지 않으면 이전 UI가 동작되지 않습니다.

Openwindow의 경우에는 윈도우로 Fragment를 호출 함으로 이전 UI도 동작할 수있기 때문에 여러 popup을 호출 할 수 있습니다.

마지막으로 openInternalWindow은 UI안에 Popup을 생성 합니다.

팝업을 움직여보면 Parent UI에서 나가지지 않는 것을 확인 할 수있습니다.

그리고 각각의 fragment 호출 시 option들이 존재합니다.

openModal과 openWindow는 

openInternalWindow는

의 옵션을 가집니다.

 

반응형

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

TornadoFx - Accessing  (0) 2019.10.07
TornadoFx - replaceView , passParameter  (0) 2019.10.07
TornadoFx - Controller, runAsync  (0) 2019.10.07
TornadoFX - View 적용  (0) 2019.10.07
TornadoFX 동작시키기  (0) 2019.10.07