Javafx 简明教程

JavaFX - HBox Layout

HBox Layout in JavaFX

HBox ,也称为水平框,是一种布局窗格,它按单个水平行排列 JavaFX 应用程序的所有节点。HBox 布局窗格由 javafx.scene.layout 包中名为 HBox 的类表示。实例化此类以创建 HBox 布局。HBox 类的构造函数如下 −

  1. HBox() − 它是默认构造函数,构造一个间距为 0 的 HBox 布局。

  2. HBox(double spacingVal) − 它构造一个新的 HBox 布局,其中节点之间的间距指定。

  3. HBox(double spacingVal, Node nodes) − HBox 类的此参数化构造函数接受子节点及它们之间的间距,并使用指定组件创建一个新的 HBox 布局。

  4. HBox(Node nodes) − 它创建一个具有指定子节点和 0 间距的 HBox 布局。

在下面的快照中,我们可以看到红色框内的 UI 组件被放置在水平布局内 −

sample hbox

HBox 类具有以下属性 −

  1. alignment − 此属性表示 HBox 边界内节点的对齐方式。我们可以使用 setter 方法 setAlignment() 为此属性设置值。

  2. fillHeight − 此属性为布尔类型,并将它设置为 true 时,HBox 中的可调整大小节点将调整到 HBox 的高度。我们可以使用 setter 方法 setFillHeight() 为此属性设置值。

  3. spacing − 此属性为 double 类型,表示 HBox 子节点之间的空间。我们可以使用 setter 方法 setSpacing() 为此属性设置值。

  4. padding − 它表示 HBox 的边框与其子节点之间的空间。我们可以使用 setter 方法 setPadding() 为此属性设置值,该方法接受 Insets 构造函数作为参数值。

除这些外, HBox 类还提供一些方法,如下 −

S.No

methods & Description

1

setHgrow()*Sets the horizontal grow priority for the child when contained by an HBox. This method accepts a node and a priority value. The possible priority value could be *Policy.ALWAYSPolicy.SOMETIMESPolicy.NEVER

2

*setMargin()*使用此方法,您可以为 HBox 设置外边距。此方法接受一个节点和 Insets 类的对象(矩形区域 4 个侧面的内部偏移量集)。

Example

以下程序是 HBox 布局的示例。在此处,我们插入一个文本字段和两个名为 play 和 stop 的按钮。将此 JavaFX 代码保存在一个名为 HBoxExample.java 的文件中。

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import javafx.scene.layout.HBox;

public class HBoxExample extends Application {
   @Override
   public void start(Stage stage) {
      //creating a text field
      TextField textField = new TextField();

      //Creating the play button
      Button playButton = new Button("Play");

      //Creating the stop button
      Button stopButton = new Button("stop");

      //Instantiating the HBox class
      HBox hbox = new HBox();

      //Setting the space between the nodes of a HBox pane
      hbox.setSpacing(10);

      //Adding all the nodes to the HBox
      hbox.getChildren().addAll(textField, playButton, stopButton);

      //Setting the margin to the nodes
      hbox.setMargin(textField, new Insets(20, 20, 20, 20));
      hbox.setMargin(playButton, new Insets(20, 20, 20, 20));
      hbox.setMargin(stopButton, new Insets(20, 20, 20, 20));

      //Creating a scene object
      Scene scene = new Scene(hbox, 400, 300);

      //Setting title to the Stage
      stage.setTitle("Hbox Example in JavaFX");

      //Adding scene to the stage
      stage.setScene(scene);

      //Displaying the contents of the stage
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

使用以下命令,从命令提示符编译并执行已保存的 java 文件。

javac --module-path %PATH_TO_FX% --add-modules javafx.controls HBoxExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls HBoxExample

执行后,上述程序会生成如下所示的 JavaFX 窗口。

hbox output

Example

在以下示例中,我们将使用 HBox 类的参数化构造函数创建水平布局。将此 JavaFX 代码保存在一个名为 HBoxExample.java 的文件中。

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import javafx.scene.layout.HBox;

public class HBoxExample extends Application {
   @Override
   public void start(Stage stage) {
      //creating a text field
      TextField textField = new TextField();

      //Creating the play button
      Button playButton = new Button("Play");

      //Creating the stop button
      Button stopButton = new Button("stop");

      //Instantiating the HBox class
      HBox box = new HBox(10, textField, playButton, stopButton);
      box.setAlignment( Pos.CENTER);

      //Creating a scene object
      Scene scene = new Scene(box, 400, 300);

      //Setting title to the Stage
      stage.setTitle("Hbox Example in JavaFX");

      //Adding scene to the stage
      stage.setScene(scene);

      //Displaying the contents of the stage
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

使用以下命令,从命令提示符编译并执行已保存的 java 文件。

javac --module-path %PATH_TO_FX% --add-modules javafx.controls HBoxExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls HBoxExample

在执行上述程序时,将生成以下输出。

hbox output2