如何绑定阶段,部件的调整调整?(How to bind stage resizing with re

2019-06-23 23:18发布

我有FXML一个JavaFX 2.0应用程序。 我需要的组件(TextField的,组合框,布局等)进行时,与应用程序窗口大小调整。 所以...

  • 因为它在写为JavaFX Oracle文档 ,做出这样的事情有形状,有一些特殊的属性,形状:

当使用JavaFX构建GUI应用程序,你会发现,某些类的API中已经实现了性能。 例如, javafx.scene.shape.Rectangle类包含属性arcHeightarcWidthheightwidthx ,和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 = 100X2 = 200。 其中x1和x2值是纵向方框角的坐标。

场景生成器如何能帮助我在这种情况呢?

Answer 1:

另一个简单的选择是使用JavaFX的场景生成器(最近变得可作为公开测试版: http://www.oracle.com/technetwork/java/javafx/tools/index.html )

它允许创建通过拖放和拖放和锚UI元素边界(由UI 锚工具 ),所以他们移动/调整与窗口边框。

更新:

为了实现自动尺寸比例的布局,您可以使用GridPaneColumnConstraint

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();
}


Answer 2:

构建可调整大小的图形用户界面的一些建议=>

  • 确保您的应用程序的根是一个窗格中的子类,而不是一组。
  • 松开按钮(例如button.setMaxSize(Double.MAX_VALUE,Double.MAX_VALUE)的最大大小。
  • 大部分时间布局窗格可以为您处理调整大小和你不需要绑定和听众=>即只能绑定,当你真的需要。
  • UI控件和布局窗格是地区=>所有区域具有只读height和width属性可以听和结合。
  • 你不能直接结合的控制到另一个值的高度和宽度的特性。 而是使用minWidth /高度,prefWidth /身高,maxWidth / Height属性。
  • 现场有高度,可以绑定到如果需要width属性。 如果你这样做,当舞台的大小时,现场将被调整,那么你的绑定组件将被调整。 如果场景的根是一个布局面板,而不是一组,此绑定通常是不必要的。
  • 如果不设置现场的高度和宽度,对于一个独立的应用程序,现场(和阶段)将被调整大小以适应场景的根节点的首选大小(这通常是你想要的)。
  • 如果一切都失败了,你就可以开始重写家长layoutchildren方法。

下面是一个例子 ,它实现上面的一些原理的可调整大小的JavaFX UI的。



Answer 3:

建议:

  1. 如果你只有一个主舞台,然后将其存储在一个静态字段/变量而应用程序启动和访问所有控制器类。
  2. 你可以把所有控件/组件到布局/窗格中管理其子女自动布局。 对于不同的布局检查API文档。 在此之后,相应地结合阶段场景的宽度和高度属性以这种布局的属性。 更多关于绑定看看使用JavaFX属性和绑定 。
    的实施例的单向结合


文章来源: How to bind stage resizing with resizing of components?