Javafx 简明教程
JavaFX - HBox Layout
HBox Layout in JavaFX
HBox ,也称为水平框,是一种布局窗格,它按单个水平行排列 JavaFX 应用程序的所有节点。HBox 布局窗格由 javafx.scene.layout 包中名为 HBox 的类表示。实例化此类以创建 HBox 布局。HBox 类的构造函数如下 −
-
HBox() − 它是默认构造函数,构造一个间距为 0 的 HBox 布局。
-
HBox(double spacingVal) − 它构造一个新的 HBox 布局,其中节点之间的间距指定。
-
HBox(double spacingVal, Node nodes) − HBox 类的此参数化构造函数接受子节点及它们之间的间距,并使用指定组件创建一个新的 HBox 布局。
-
HBox(Node nodes) − 它创建一个具有指定子节点和 0 间距的 HBox 布局。
在下面的快照中,我们可以看到红色框内的 UI 组件被放置在水平布局内 −
HBox 类具有以下属性 −
-
alignment − 此属性表示 HBox 边界内节点的对齐方式。我们可以使用 setter 方法 setAlignment() 为此属性设置值。
-
fillHeight − 此属性为布尔类型,并将它设置为 true 时,HBox 中的可调整大小节点将调整到 HBox 的高度。我们可以使用 setter 方法 setFillHeight() 为此属性设置值。
-
spacing − 此属性为 double 类型,表示 HBox 子节点之间的空间。我们可以使用 setter 方法 setSpacing() 为此属性设置值。
-
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.ALWAYS 、 Policy.SOMETIMES 和 Policy.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 窗口。
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
在执行上述程序时,将生成以下输出。