我有一个带FXML的JavaFX 2.0应用程序。 我希望在调整带有应用程序的窗口时调整组件(TextFields,ComboBoxes,layouts等)的大小。 所以......
使用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.");
}
});
所以有两个问题:
那么,我该如何解决我的问题?
UPD 。关于Scene Builder到Sergey Grinev:当我在我的组件上使用 Ctrl + K 时(告诉它占据其父组件的整个区域) - 一切正常。
但是,如果我想告诉我的组件占据 50%的区域怎么办? 例如,我有一个带有两个VBox的标签。 标签的宽度为 100px 。每个Vbox的宽度 50px 。 VBox1 x1 = 0 , x2 = 50 ,VBox2 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如何帮助我?
答案 0 :(得分:20)
有关构建可调整大小的guis =&gt;
的一些建议以下是可调整大小的JavaFX UI的an example,它实现了上述一些原则。
答案 1 :(得分:7)
另一个简单的选择是使用JavaFX Scene Builder(最近成为公共测试版:http://www.oracle.com/technetwork/java/javafx/tools/index.html)
它允许通过拖放创建UI并将UI元素锚定到边框(anchor tool),因此它们可以使用窗口边框移动/调整大小。
更新:
要实现自动调整百分比布局,您可以将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();
}
答案 2 :(得分:3)
建议: