Javafx 简明教程
JavaFX - Anchorpane Layout
AnchorPane Layout in JavaFX
Anchor Pane 允许将子节点边缘锚定在相对于 anchor 窗口边缘的指定偏移量处。它确保节点与布局窗格的边缘保持固定距离。在 JavaFX 中,anchor 窗口由名称为 AnchorPane 的类表示,该类是 javafx.scene.layout 包的一部分。
The Anchor Pane enables the anchoring of child node edges at a specified offset from the anchor pane’s edges. It ensures that nodes maintain a fixed distance from the edge of layout pane. In JavaFX, an anchor pane is represented by a class named AnchorPane which is a part of javafx.scene.layout package.
假设我们有一个节点,我们需要从窗格的边界在所有方向(顶部、底部、右侧和左侧)设置一个 anchor。为了设置 anchor,AnchorPane 类提供了四种内置方法,即 setBottomAnchor() 、 setTopAnchor() 、 setLeftAnchor() 和 setRightAnchor() 。这些方法接受一个表示 anchor 的 double 值。下图对此进行了说明 −
Suppose, we have a node and we need to set an anchor to it from the bounds of the pane in all directions (Top, Bottom, Right and Left). To set an anchor, the AnchorPane class provides four built-in methods namely setBottomAnchor(), setTopAnchor(), setLeftAnchor() and setRightAnchor(). These methods accepts a double value representing the anchor. The following figure illustrates the same −

Note that 如果 anchor 窗口设置了边框和/或内边距,则会根据这些内边距的内边缘计算偏移量。
Note that if the anchor pane has a border and/or padding set, the offsets are calculated from the inner edge of these insets.
AnchorPane 类的构造函数如下 −
Cosntructors of the AnchorPane class are as follows −
-
AnchorPane() − Constructs an empty AnchorPane layout.
-
AnchorPane(Node childNodes) − It creates a new AnchorPane layout with the specified nodes.
Example
以下程序是 Anchor Pane 布局的示例。在此处,我们在锚点窗格中插入一个旋转圆柱体。将此代码保存在名为 AnchorPaneExample.java 的文件中。
The following program is an example of the Anchor Pane layout. In this, we are inserting a rotating cylinder in an anchor pane. Save this code in a file with the name AnchorPaneExample.java.
import javafx.animation.RotateTransition;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Cylinder;
import javafx.scene.transform.Rotate;
import javafx.stage.Stage;
import javafx.util.Duration;
public class AnchorPaneExample extends Application {
@Override
public void start(Stage stage) {
//Drawing a Cylinder
Cylinder cylinder = new Cylinder();
//Setting the properties of the Cylinder
cylinder.setHeight(180.0f);
cylinder.setRadius(100.0f);
//Preparing the phong material of type diffuse color
PhongMaterial material = new PhongMaterial();
material.setDiffuseColor(Color.BLANCHEDALMOND);
//Setting the diffuse color material to Cylinder5
cylinder.setMaterial(material);
//Setting rotation transition for the cylinder
RotateTransition rotateTransition = new RotateTransition();
//Setting the duration for the transition
rotateTransition.setDuration(Duration.millis(1000));
//Setting the node for the transition
rotateTransition.setNode(cylinder);
//Setting the axis of the rotation
rotateTransition.setAxis(Rotate.X_AXIS);
//Setting the angle of the rotation
rotateTransition.setByAngle(360);
//Setting the cycle count for the transition
rotateTransition.setCycleCount(RotateTransition.INDEFINITE);
//Setting auto reverse value to false
rotateTransition.setAutoReverse(false);
//playing the animation
rotateTransition.play();
//Creating an Anchor Pane
AnchorPane anchorPane = new AnchorPane();
//Setting the anchor to the cylinder
AnchorPane.setTopAnchor(cylinder, 50.0);
AnchorPane.setLeftAnchor(cylinder, 50.0);
AnchorPane.setRightAnchor(cylinder, 50.0);
AnchorPane.setBottomAnchor(cylinder, 50.0);
//Adding cylinder to the pane
anchorPane.getChildren().addAll(cylinder);
//Creating a scene object
Scene scene = new Scene(anchorPane, 400, 300);
//Setting title to the Stage
stage.setTitle("Anchor Pane Example");
//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 文件。
Compile and execute the saved java file from the command prompt using the following commands.
javac --module-path %PATH_TO_FX% --add-modules javafx.controls AnchorPaneExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls AnchorPaneExample
执行后,上述程序会生成如下所示的 JavaFX 窗口。
On executing, the above program generates a JavaFX window as shown below.
