【问题标题】:Java components proportional to window size (JavaFX)与窗口大小成比例的 Java 组件 (JavaFX)
【发布时间】:2018-02-10 21:54:34
【问题描述】:

我需要一些帮助才能在我的场景图上缩放组件。在下图中,我将组件放在顶部,间距很好,一切看起来都很正常。

我通过在顶部菜单上设置填充来做到这一点

menu.setPadding(new Insets(30, 0, 30, 30));

HBox.setMargin(button, new Insets(0,0,0,370)); 用于按钮,其中 370 是字段和按钮之间的填充。此外,文本字段的首选宽度为 400。

但是,当我展开窗口时,我意识到我为文本字段设置的首选宽度并没有改变而且它很小,而且按钮的边距也发生了变化,所以我不知道如何设置这个数字比例到窗口的大小。我不确定我是用 CSS 还是简单的 java 方法来解决这个问题。

这是处理组件在最大化窗口时出现问题的顶部的代码。 'pane' 是 BorderPane 的一个实例。

private void setTopMenu() {

 menu = new HBox();
 menu.setPadding(new Insets(30, 0, 30, 30));

 button = new Button("ABCD ABCD ABCD"); 

 tf = new TextField();
 tf.setPromptText("search"); 
 tf.setPrefWidth(400);
 tf.setId("text-field");

 top.getChildren().addAll(tf, button);

 HBox.setMargin(button, new Insets(0,0,0,370));

 pane.setTop(menu);
}

【问题讨论】:

  • 如果你只需要调整TopMenu内的组件大小,你不能把bind窗口的宽度调整为ButtonTextArea的宽度吗?跨度>
  • 但是怎么做呢? @MarcoLuzzara

标签: java css user-interface javafx layout


【解决方案1】:

你有两种方法:

  • 第一个最简单,但也不太灵活:

    HBox.setHgrow(button, Priority.ALWAYS);
    HBox.setHgrow(tf, Priority.ALWAYS);
    

    指定Priority,您可以决定如何填充组件和HBox之间的额外空间。

  • 使用Property 绑定:

    button.prefWidthProperty().bind(menu.widthProperty().divide(3));
    

    在此示例中,您的 button 将在每次最后一个属性更改时调整为 menuWidthProperty 的 1/3。 Here 解释得更好。

【讨论】:

  • 另请注意,使用GridPane(单行),您可以将列的宽度指定为百分比;所以你可以在没有绑定的情况下获得与第二个选项相同的结果。
  • 是的,他本可以使用ColumnConstraintsetPercentWidth 方法。你让我们注意到它是对的。
  • 感谢@MarcoLuzzara 向我介绍绑定,我印象深刻,我以前不知道它。我几乎得到了我想要的结果。我没有绑定到菜单(如您的答案),而是设法绑定到场景宽度。但是,边距仍然会发生变化,有什么方法可以将按钮的边距也绑定到场景宽度?我进行了快速搜索,发现了填充绑定,但这对我来说行不通。再次感谢
  • @MarcoLuzzara 正如我所说,我最终使用 button.prefWidthProperty().bind(scene.widthProperty().divide(6))绑定到场景而不是菜单> 我现在对按钮的宽度感到满意,因为我用鼠标更改了屏幕大小,这是这个问题的主要目的。但正如您所看到的,我设置了按钮的边距并在 setMargins() 方法中将新的 Insets 对象作为参数传递了,但是当我最大化或对屏幕进行任何更改时,这些边距会发生变化.那么我可以像我对按钮宽度所做的那样绑定边距,所以边距的这些变化是我指定的吗?
  • @c2J 您说您发现了填充绑定而不是边距绑定,但它对您不起作用。我猜你用过paddingProperty,你能告诉我们你的无效代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
  • 2020-04-17
相关资源
最近更新 更多