我有一个使用FXML的JavaFX 2.0 应用程序。希望在窗口大小调整时,组件(如文本输入框、下拉框、布局等)能够自动调整大小。
- 根据Oracle JavaFX文档所述,要实现这样的效果,可以使用一些特殊的形状属性:
在使用JavaFX构建GUI应用程序时,您会注意到API中某些类已经实现了属性。例如,
javafx.scene.shape.Rectangle
类包含了arcHeight
、arcWidth
、height
、width
、x
和y
等属性。对于每个属性,都有相应的方法与之匹配,符合之前描述的约定。例如,getArcHeight()
、setArcHeight(double)
和arcHeightProperty()
,它们共同表明(对开发人员和工具)该属性存在。
要向舞台添加监听器,可以执行以下操作:
stage.resizableProperty().addListener(new ChangeListener<Boolean>(){
@Override
public void changed(ObservableValue<? extends Boolean> arg0, Boolean arg1, Boolean arg2){
throw new UnsupportedOperationException("Not supported yet.");
}
});
所以有两个问题:
- 为了进行一些绑定,我必须在控制器类中获取我的场景(stage)。那么,我如何在控制器类中获取场景(stage)?
- 看起来 UI 控件没有任何宽度\高度属性可以绑定到其他对象。或者我还没有找到它们。
那么,我该如何解决我的问题呢?
更新 关于 Scene Builder 对 Sergey Grinev 的回答: 当我在我的组件上使用 Ctrl+K (让它占据其父组件的整个区域) - 一切都好。
但是如果我想告诉我的组件占据50%的区域呢? 例如,我有一个选项卡,其中有两个 VBox。选项卡的宽度为100px。每个 Vbox 宽度为50px。VBox1 的 x 坐标为x1=0,x2=50,而 VBox2 的 x 坐标为x1=50,x2=100。 然后我调整JavaFX应用程序窗口的大小。 现在我的选项卡宽度为200px。 但是我的 Vboxes 宽度仍然是50px:VBox1 的 x1=0,x2=50,而 VBox2 的x1=150,x2=200。 而我需要它们分别为 VBox1 x1=0 和 x2=100,VBox2 x1=100 和 x2=200。其中 x1 和 x2 的值是 VBoxes 角落的坐标。
那么,Scene Builder 如何帮助我解决这个问题呢?