我在理解JavaFX中的布局时遇到了一些问题。请考虑以下代码。
Stage { title: "ListView test" scene: Scene { width: 400 height: 400 content: [ VBox { content: [ ListView { height: 200 width: 200 items: ["item1", "item2"] } ] } ] } }
我期待ListView以200 x 200维度显示,但无论我如何解决这个问题,ListView的宽度和高度似乎都是固定的。但是下面的代码可以按照我的意图显示ListView。
Stage { title: "ListView test" scene: Scene { width: 400 height: 400 content: [ ListView { height: 200 width: 200 items: ["item1", "item2"] } ] } }
那么,这里有什么问题?我不能在布局中使用ListView?
答案 0 :(得分:3)
在JavaFX 1.2.x中,布局中节点的宽度和高度信息用于读取目的。如果要指定“首选”维度,请使用
ListVIew {
layoutInfo: LayoutInfo {width: 200, height: 200}
}
这将在布局中处理,因为首选大小和组件将根据此布局。如果您有使用NetBeans JavaFX Composer Preview的经验,您可能会注意到生成的代码使用特殊类型的绑定,可以在布局和其他容器(Scene,Group)中正确调整大小。
Ad Broken:Java FX中的布局是基于Node构建的,并使用算法方法来定位和调整组件,这些组件独立于组/场景中使用的几何位置。不幸的是,它在1.2中带来了某种二元性,这对于初学者来说应该是误导性的。
答案 1 :(得分:1)
允许布局节点更改其子项的位置和大小。简单地设置一个孩子的宽度和高度,并期望布局知道它应该尊重你的新值是不好的,你需要的是一些方法来告诉布局节点你想要尊重的值。看一下LayoutInfo类,以及Node中的layoutInfo变量。