java - 使 Gridpane 对象填满屏幕

标签 java javafx gridpane

我目前正在尝试学习JavaFX。我创建了一个带有 Gridpane 的小型设置,如下面的屏幕截图所示

enter image description here

我将网格 Pane 的背景设为红色,以便您可以看到它填充了整个屏幕。但不幸的是,标签和文本字段保持相同的大小。我希望它们随着网格 Pane 的大小而缩放。

下面是目前的代码:

   @Override
public void start(Stage primaryStage) throws Exception{
    primaryStage.setTitle("Test Application");

    grid = new GridPane();
    grid.setAlignment(Pos.CENTER);
    grid.setHgap(10);
    grid.setVgap(10);
    grid.setPadding(new Insets(10, 10, 10, 10));
    grid.setPrefSize(WINDOW_WIDTH, WINDOW_HEIGHT);
    grid.setMinSize(WINDOW_WIDTH, WINDOW_HEIGHT);

    textWelcome = new Text("Welcome");
    textWelcome.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));
    grid.add(textWelcome, 0, 0, 2, 1);

    labelName = new Label("User Name: ");
    grid.add(labelName, 0,1);

    nameField = new TextField();
    grid.add(nameField, 1,1);

    labelPW = new Label("Password: ");
    grid.add(labelPW,0,2);

    pwField = new PasswordField();
    grid.add(pwField,1,2);

    buttonSign = new Button("Sign in");
    HBox hBox = new HBox(10);
    hBox.setAlignment(Pos.BOTTOM_RIGHT);
    hBox.getChildren().add(buttonSign);
    grid.add(hBox,1,3);

    grid.setStyle("-fx-background-color:red");
    //grid.setGridLinesVisible(true);
    scene = new Scene(grid, WINDOW_WIDTH, WINDOW_HEIGHT);
    primaryStage.setScene(scene);
    primaryStage.show();
}

所以现在我想知道如何使整个东西放大,这样两侧就不会留有很大的余量。

最佳答案

您可以使用ColumnConstraintsRowConstraints配置列和行的行为。您还可以使用静态 GridPane 方法在各个节点上设置属性。

请参阅 documentation 中标题为“行/列大小调整”和“可选布局约束”的部分。

这是一个简单的例子:

import javafx.application.Application;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class GridPaneColumnGrowExample extends Application {

    private static final double WINDOW_WIDTH = 600 ;
    private static final double WINDOW_HEIGHT = 400 ;

    @Override
    public void start(Stage primaryStage) throws Exception{
        primaryStage.setTitle("Test Application");

        GridPane grid = new GridPane();
        grid.setAlignment(Pos.CENTER);
        grid.setHgap(10);
        grid.setVgap(10);
        grid.setPadding(new Insets(10, 10, 10, 10));
        grid.setPrefSize(WINDOW_WIDTH, WINDOW_HEIGHT);
        grid.setMinSize(WINDOW_WIDTH, WINDOW_HEIGHT);

        ColumnConstraints leftCol = new ColumnConstraints();
        leftCol.setHalignment(HPos.RIGHT);
        leftCol.setHgrow(Priority.NEVER);

        ColumnConstraints rightCol = new ColumnConstraints();
        rightCol.setHgrow(Priority.ALWAYS);

        grid.getColumnConstraints().addAll(leftCol, rightCol);

        Text textWelcome = new Text("Welcome");
        textWelcome.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));
        grid.add(textWelcome, 0, 0, 2, 1);

        // override column constraints alignment for this cell
        GridPane.setHalignment(textWelcome, HPos.LEFT);

        Label labelName = new Label("User Name: ");
        grid.add(labelName, 0,1);

        TextField nameField = new TextField();
        grid.add(nameField, 1,1);

        Label labelPW = new Label("Password: ");
        grid.add(labelPW,0,2);

        PasswordField pwField = new PasswordField();
        grid.add(pwField,1,2);

        Button buttonSign = new Button("Sign in");
        grid.add(buttonSign,1,3);
        GridPane.setHalignment(buttonSign, HPos.RIGHT);

        grid.setStyle("-fx-background-color:red");
        //grid.setGridLinesVisible(true);
        Scene scene = new Scene(grid, WINDOW_WIDTH, WINDOW_HEIGHT);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

关于java - 使 Gridpane 对象填满屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32510918/

相关文章:

java - 如何解决 Spring MVC 中的 org.springframework.beans.factory.BeanNotOfRequiredTypeException 错误

java - 检查 Java 字节码是否包含调试符号

java - 从数学方程中提取变量

java - 在 javafx 中制作搜索栏

css - 使用 CSS 在 javaFX 中旋转 GridPane

java - 以并发方式逐行处理文件

JavaFX - 并发和更新标签

java - 为其他操作系统构建 Java 模块运行时镜像

JavaFX 图形故障

css - 使用 CSS 在 GridPane 中居中子项