添加 TornadoFX 对象会删除舞台的其他元素
Adding TornadoFX object removes other elements of stage
我在玩 TornadoFX,想在我的屏幕上添加一条水平线,看看它是如何工作的。我将其添加到我的代码中,如下所示:
private val menuView: MenuView by inject()
private val controller: MainController by inject()
override val root = borderpane {
top = menuView.root
style {
backgroundColor += Color.WHITE
}
val data = controller.getData()
center {
for (i in 0 until data.count()) {
val values = data[i]
datagrid(values) {
if (data.count() > 0) {
cellWidth = (8.0 * (values.maxBy { it.root.count() }!!.root.count()))
}
cellHeight = 20.0
horizontalCellSpacing = 0.0
maxCellsInRow = controller.maxNum
}
}
line {
startY = 3000.0
endY = 3000.0
startX = 500.0
endX = 5000.0
}
}
}
似乎在 center
组件中添加该行会导致它成为唯一呈现的内容。将 borderpane
替换为 stackpane
即可达到预期效果,如下所示:
private val menuView: MenuView by inject()
private val controller: MainController by inject()
override val root = stackpane {
style {
backgroundColor += Color.WHITE
}
val data = controller.getData()
for (i in 0 until data.count()) {
val values = data[i]
datagrid(values) {
if (data.count() > 0) {
cellWidth = (8.0 * (values.maxBy { it.root.count() }!!.root.count()))
}
cellHeight = 20.0
horizontalCellSpacing = 0.0
maxCellsInRow = controller.maxNum
}
}
line {
startY = 3000.0
endY = 3000.0
startX = 500.0
endX = 5000.0
}
}
但是,这会从顶部删除菜单栏,我也想保留它。有没有办法两者兼得?
感谢@Slaw 帮助我解决这个问题。解决方案其实很简单。在解决方案的 center
部分,我不得不将它们嵌入到 StackPane
中,而不是仅仅在那里构建所有节点。这是因为center
只能取一个节点。
因此,解决方案如下所示:
private val menuView: MenuView by inject()
private val controller: MainController by inject()
override val root = borderpane {
top = menuView.root
style {
backgroundColor += Color.WHITE
}
val data = controller.getData()
center {
stackpane {
for (i in 0 until data.count()) {
val values = data[i]
datagrid(values) {
if (data.count() > 0) {
cellWidth = (8.0 * (values.maxBy { it.root.count() }!!.root.count()))
}
cellHeight = 20.0
horizontalCellSpacing = 0.0
maxCellsInRow = controller.maxNum
}
}
line {
startY = 3000.0
endY = 3000.0
startX = 500.0
endX = 5000.0
}
}
}
}
我在玩 TornadoFX,想在我的屏幕上添加一条水平线,看看它是如何工作的。我将其添加到我的代码中,如下所示:
private val menuView: MenuView by inject()
private val controller: MainController by inject()
override val root = borderpane {
top = menuView.root
style {
backgroundColor += Color.WHITE
}
val data = controller.getData()
center {
for (i in 0 until data.count()) {
val values = data[i]
datagrid(values) {
if (data.count() > 0) {
cellWidth = (8.0 * (values.maxBy { it.root.count() }!!.root.count()))
}
cellHeight = 20.0
horizontalCellSpacing = 0.0
maxCellsInRow = controller.maxNum
}
}
line {
startY = 3000.0
endY = 3000.0
startX = 500.0
endX = 5000.0
}
}
}
似乎在 center
组件中添加该行会导致它成为唯一呈现的内容。将 borderpane
替换为 stackpane
即可达到预期效果,如下所示:
private val menuView: MenuView by inject()
private val controller: MainController by inject()
override val root = stackpane {
style {
backgroundColor += Color.WHITE
}
val data = controller.getData()
for (i in 0 until data.count()) {
val values = data[i]
datagrid(values) {
if (data.count() > 0) {
cellWidth = (8.0 * (values.maxBy { it.root.count() }!!.root.count()))
}
cellHeight = 20.0
horizontalCellSpacing = 0.0
maxCellsInRow = controller.maxNum
}
}
line {
startY = 3000.0
endY = 3000.0
startX = 500.0
endX = 5000.0
}
}
但是,这会从顶部删除菜单栏,我也想保留它。有没有办法两者兼得?
感谢@Slaw 帮助我解决这个问题。解决方案其实很简单。在解决方案的 center
部分,我不得不将它们嵌入到 StackPane
中,而不是仅仅在那里构建所有节点。这是因为center
只能取一个节点。
因此,解决方案如下所示:
private val menuView: MenuView by inject()
private val controller: MainController by inject()
override val root = borderpane {
top = menuView.root
style {
backgroundColor += Color.WHITE
}
val data = controller.getData()
center {
stackpane {
for (i in 0 until data.count()) {
val values = data[i]
datagrid(values) {
if (data.count() > 0) {
cellWidth = (8.0 * (values.maxBy { it.root.count() }!!.root.count()))
}
cellHeight = 20.0
horizontalCellSpacing = 0.0
maxCellsInRow = controller.maxNum
}
}
line {
startY = 3000.0
endY = 3000.0
startX = 500.0
endX = 5000.0
}
}
}
}