JavaFX - AnchorPane 布局



JavaFX 中的 AnchorPane 布局

Anchor Pane 允许将子节点边缘锚定在距锚定面板边缘的指定偏移量处。它确保节点保持与布局面板边缘的固定距离。在 JavaFX 中,锚定面板由名为 AnchorPane 的类表示,它是 javafx.scene.layout 包的一部分。

假设我们有一个节点,我们需要从面板边界的所有方向(顶部、底部、右侧和左侧)设置其锚点。要设置锚点,AnchorPane 类提供了四种内置方法,即 setBottomAnchor()setTopAnchor()setLeftAnchor()setRightAnchor()。这些方法接受表示锚点的双精度值。下图说明了这一点:

Anchor Pane

请注意,如果锚定面板设置了边框和/或填充,则偏移量将从这些内边距的内边缘计算。

AnchorPane 类的构造函数如下:

  • AnchorPane() - 构造一个空的 AnchorPane 布局。

  • AnchorPane(Node childNodes) - 它使用指定的节点创建一个新的 AnchorPane 布局。

示例

下面的程序是 Anchor Pane 布局的示例。在这个例子中,我们正在 Anchor Pane 中插入一个旋转的圆柱体。将此代码保存在名为 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 文件。

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

输出

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

AnchorPane
广告