我无法让 HBox 中的元素增长,因此我从 java2s.com 下载了以下示例代码。它是一个最小的不起作用的例子:
package fxtest;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class Fxtest extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("");
Group root = new Group();
Scene scene = new Scene(root, 600, 250, Color.WHITE);
HBox hbox = new HBox();
TextField field = new TextField();
HBox.setHgrow(field, Priority.ALWAYS);
hbox.getChildren().addAll(new Label("Search:"), field, new Button("Go"));
root.getChildren().add(hbox);
primaryStage.setScene(scene);
primaryStage.show();
}
}
如果我理解正确的话,TextField 应该会增长,不是吗?
我的Java版本是1.7.0_51
我的JavaFX版本是2.2.51-b13
你知道为什么它不起作用/我必须做什么吗? 谢谢!
为什么HBox.setHgrow不适合你
您使用Group作为场景的根节点,并且组的大小不可调整,因此组大小不会根据场景的大小进行调整。
一个群体将承担其子群体的集体界限,而不是 直接调整大小。
默认情况下,组将“自动调整”其托管的大小 在布局过程中将子项的大小调整为他们喜欢的大小
一般来说,您很少想使用组作为场景的根节点。
如何修复
仅在场景中使用可调整大小的节点(Pane子类或Control子类)。
样品
用下面的方法替换您的启动方法,该方法会删除 Group 根节点,并使 HBox 成为场景的根节点:
public void start(Stage primaryStage) {
HBox hbox = new HBox(10);
TextField field = new TextField();
HBox.setHgrow(field, Priority.ALWAYS);
hbox.setAlignment(Pos.BASELINE_LEFT);
hbox.getChildren().addAll(
new Label("Search:"), field, new Button("Go")
);
hbox.setPadding(new Insets(10));
Scene scene = new Scene(hbox, 600, 250, Color.WHITE);
primaryStage.setScene(scene);
primaryStage.show();
}
调整窗口大小后示例的输出(您可以看到搜索文本字段根据要求增大和缩小以适应可用空间):
jewelsea 为给定的示例提供了正确的答案;谢谢!
它帮助我找出了具有相似症状但根源不同的问题。 如果使用ScrollPanes,需要设置
scrollPane.setFitToHeight(true);
scrollPane.setFitToWidth(true);
为了获得理想的生长效果。
很好。解决了我的问题。
Hbox.setHgrow != hbox.setHgrow