JavaFX布局问题

时间:2010-04-07 15:48:12

标签: listview javafx layout hbox vbox

我在理解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?

2 个答案:

答案 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变量。