[출처 - 이 글은 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 |