我有FXML一个JavaFX 2.0应用程序。 我需要的组件(TextField的,组合框,布局等)进行时,与应用程序窗口大小调整。 所以...
- 因为它在写为JavaFX Oracle文档 ,做出这样的事情有形状,有一些特殊的属性,形状:
当使用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."); } });
因此,有两个问题:
- 为了使一些结合我必须让我的舞台在控制类。 所以 - 我怎样才能在控制器类中的一个阶段?
- 它看起来像UI控件没有任何宽度\高度属性,绑定到一些东西。 也许我还没有找到他们。
所以,我怎么能解决我的问题?
UPD。 有关场景生成器谢尔盖Grinev:当我使用Ctrl + K我的组件(告诉它占据其父部件的整个区域) -一切正常。
但是,如果我想要什么,告诉我的组件占据了面积的50%? 对于exammple我上面有两个纵向方框选项卡。 该选项卡的宽度为100像素 。 该VBOX的宽度50像素每一个。 VBox1具有X1 = 0,和x 2 = 50,和VBox2具有X1 = 50,和x 2 = 100。 然后,我调整我的JavaFX应用程序窗口。 现在我有标签的Width = 200像素 。 但我的纵向方框宽度仍然= 50像素 :VBox1具有X1 = 0,和x 2 = 50,和VBox2具有X1 = 150,和x2 = 200。 我需要他们VBox1 X1 = 0,X2 = 100和VBox2 X1 = 100和X2 = 200。 其中x1和x2值是纵向方框角的坐标。
场景生成器如何能帮助我在这种情况呢?
另一个简单的选择是使用JavaFX的场景生成器(最近变得可作为公开测试版: http://www.oracle.com/technetwork/java/javafx/tools/index.html )
它允许创建通过拖放和拖放和锚UI元素边界(由UI 锚工具 ),所以他们移动/调整与窗口边框。
更新:
为了实现自动尺寸比例的布局,您可以使用GridPane
与ColumnConstraint
:
public void start(Stage stage) {
VBox box1 = new VBox(1);
VBox box2 = new VBox(1);
//random content
RectangleBuilder builder = RectangleBuilder.create().width(20).height(20);
box1.getChildren().addAll(builder.build(), builder.build(), builder.build());
builder.fill(Color.RED);
box2.getChildren().addAll(builder.build(), builder.build(), builder.build());
//half by half screen
GridPane grid = new GridPane();
grid.addRow(0, box1, box2);
ColumnConstraints halfConstraint = ColumnConstraintsBuilder.create().percentWidth(50).build();
grid.getColumnConstraints().addAll(halfConstraint, halfConstraint);
stage.setScene(new Scene(grid, 300, 250));
stage.show();
}
构建可调整大小的图形用户界面的一些建议=>
- 确保您的应用程序的根是一个窗格中的子类,而不是一组。
- 松开按钮(例如button.setMaxSize(Double.MAX_VALUE,Double.MAX_VALUE)的最大大小。
- 大部分时间布局窗格可以为您处理调整大小和你不需要绑定和听众=>即只能绑定,当你真的需要。
- UI控件和布局窗格是地区=>所有区域具有只读height和width属性可以听和结合。
- 你不能直接结合的控制到另一个值的高度和宽度的特性。 而是使用minWidth /高度,prefWidth /身高,maxWidth / Height属性。
- 现场有高度,可以绑定到如果需要width属性。 如果你这样做,当舞台的大小时,现场将被调整,那么你的绑定组件将被调整。 如果场景的根是一个布局面板,而不是一组,此绑定通常是不必要的。
- 如果不设置现场的高度和宽度,对于一个独立的应用程序,现场(和阶段)将被调整大小以适应场景的根节点的首选大小(这通常是你想要的)。
- 如果一切都失败了,你就可以开始重写家长layoutchildren方法。
下面是一个例子 ,它实现上面的一些原理的可调整大小的JavaFX UI的。