TornadoFX Fragment OpenWindow 总是在最前面
TornadoFX Fragment OpenWindow is always on top
我正在使用 TornadoFX 的 fragment
class,并使用它的 openWindow()
方法在新的 window 中打开每个新的 fragment
。
window打开,一切正常。我已将模态设置为 Modality.NONE
,以便在新片段处于活动状态时可以访问原始屏幕。
我遇到的问题是新的 window 总是 在最上面,所以我必须移动它才能访问原来的 window 下面是不理想的。
这是 design/is 改变这种行为的方式吗?
我一直在研究 openWindow()
s owner =
参数,将其设置为 null 和另一个 Stage
但似乎没有任何效果。
首先,打开window的代码,view
是片段。
//h here is just the histogram, an int[]
val hisScope = HistogramScope(h, pointerVM.APUFile.file.name)
//view declared using the find method.
val view = find<Histogram>(hisScope)
view.whenUndocked {
closeChart(pointerVM)
}
//code checks to see if the requested histogram is already open
val matchingRnameHistograms = isMatchingRnameOpen(pointerVM)
if (map.size == 0 || matchingRnameHistograms.isEmpty()) {
view.openWindow(stageStyle = StageStyle.UTILITY, modality = Modality.NONE, resizable = false, owner = null, block = false)
map.put(pointerVM, view) //record which histograms are open
} else { //.. not too relevant }
接下来,这是我用以下范围声明片段的方式:
class Histogram : Fragment() {
override val scope = super.scope as HistogramScope
override val root = hbox{
hgrow = Priority.ALWAYS
vgrow = Priority.ALWAYS
style{
minWidth = 1280.px
minHeight = 250.px
}
}
提前致谢!
当您在另一个上下文中打开一个新的 window 时,owner
属性默认设置为原始 UIComponent。您可以将 owner = null
传递给 openWindow
来防止这种情况,从而允许 window 被放置在原始的下方。这是一个完整的应用程序,展示了它是如何工作的:
class MyApp : App(MainView::class)
class MainView : View() {
override val root = stackpane {
setPrefSize(800.0, 600.0)
button("Open new window").action {
find<NewWindow>().openWindow(owner = null)
}
}
}
class NewWindow : Fragment() {
override val root = label("I'm not modal!")
}
如果您仍然无法让它工作,请尝试减少代码中的因素数量:)
我正在使用 TornadoFX 的 fragment
class,并使用它的 openWindow()
方法在新的 window 中打开每个新的 fragment
。
window打开,一切正常。我已将模态设置为 Modality.NONE
,以便在新片段处于活动状态时可以访问原始屏幕。
我遇到的问题是新的 window 总是 在最上面,所以我必须移动它才能访问原来的 window 下面是不理想的。
这是 design/is 改变这种行为的方式吗?
我一直在研究 openWindow()
s owner =
参数,将其设置为 null 和另一个 Stage
但似乎没有任何效果。
首先,打开window的代码,view
是片段。
//h here is just the histogram, an int[]
val hisScope = HistogramScope(h, pointerVM.APUFile.file.name)
//view declared using the find method.
val view = find<Histogram>(hisScope)
view.whenUndocked {
closeChart(pointerVM)
}
//code checks to see if the requested histogram is already open
val matchingRnameHistograms = isMatchingRnameOpen(pointerVM)
if (map.size == 0 || matchingRnameHistograms.isEmpty()) {
view.openWindow(stageStyle = StageStyle.UTILITY, modality = Modality.NONE, resizable = false, owner = null, block = false)
map.put(pointerVM, view) //record which histograms are open
} else { //.. not too relevant }
接下来,这是我用以下范围声明片段的方式:
class Histogram : Fragment() {
override val scope = super.scope as HistogramScope
override val root = hbox{
hgrow = Priority.ALWAYS
vgrow = Priority.ALWAYS
style{
minWidth = 1280.px
minHeight = 250.px
}
}
提前致谢!
当您在另一个上下文中打开一个新的 window 时,owner
属性默认设置为原始 UIComponent。您可以将 owner = null
传递给 openWindow
来防止这种情况,从而允许 window 被放置在原始的下方。这是一个完整的应用程序,展示了它是如何工作的:
class MyApp : App(MainView::class)
class MainView : View() {
override val root = stackpane {
setPrefSize(800.0, 600.0)
button("Open new window").action {
find<NewWindow>().openWindow(owner = null)
}
}
}
class NewWindow : Fragment() {
override val root = label("I'm not modal!")
}
如果您仍然无法让它工作,请尝试减少代码中的因素数量:)