Javafx 简明教程

JavaFX - Drawing Modes Property

你可以使用 Shape3D 类在 JavaFX 应用程序中绘制 3D 形状。此类允许构建三种类型的 3D 形状:盒子、圆柱体、球体作为它的直接子类。

但是,根据你尝试创建的 JavaFX 应用程序的性质,你还可以使用 Shape3D 类提供的属性增强 3D 形状的外观。有三个这样的属性可以应用于 JavaFX 应用程序的 3D 形状。它们如下所示: -

  1. Cull Face Property

  2. Drawing Modes Property

  3. Material Property

在本章中,我们将学习 JavaFX 中的绘制模式属性。

Drawing Modes Property

绘制模式是属于 DrawMode 枚举类型的属性,它表示用于绘制当前 3D 形状的绘制模式类型。在 JavaFX 中,可以选择两种绘制模式来绘制 3D 形状,它们是: -

  1. Fill - 此模式绘制并填充 2D 形状(DrawMode.FILL)。

  2. Line - 此模式使用线绘制 3D 形状(DrawMode.LINE)。

默认情况下,三维形状的绘制模式是填充。但你仍然可以使用 setDrawMode() 方法选择绘制模式来绘制 3D 形状,如下所示: -

box.setDrawMode(DrawMode.FILL);

Example

以下程序是一个展示 3D 盒子上 LINE 绘制模式的示例。将此代码保存在名为 BoxDrawModeLine.java 的文件中。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.Box;
import javafx.scene.shape.DrawMode;
import javafx.stage.Stage;

public class BoxDrawModeLine extends Application {
   @Override
   public void start(Stage stage) {
      //Drawing a Box
      Box box1 = new Box();

      //Setting the properties of the Box
      box1.setWidth(100.0);
      box1.setHeight(100.0);
      box1.setDepth(100.0);

      //Setting the position of the box
      box1.setTranslateX(200);
      box1.setTranslateY(150);
      box1.setTranslateZ(0);

      //Setting the drawing mode of the box
      box1.setDrawMode(DrawMode.LINE);

      //Creating a Group object
      Group root = new Group(box1);

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

      //Setting title to the Stage
      stage.setTitle("Drawing a Box");

      //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 BoxDrawModeLine.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls BoxDrawModeLine

执行时,以上程序将生成一个 JavaFX 窗口,其中显示了一个使用 LINE 绘制模式的盒子,如下所示: -

drawing mode line

Example

现在让我们看另一个示例,该示例展示了在 3D 形状上使用 FILL 绘制模式。为了正确显示这些模式的差异,我们将再次在 3D 盒子上应用此模式。将此代码保存在名为 BoxDrawModeFill.java 的文件中。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.shape.Box;
import javafx.scene.shape.DrawMode;
import javafx.stage.Stage;

public class BoxDrawModeFill extends Application {
   @Override
   public void start(Stage stage) {
      //Drawing a Box
      Box box1 = new Box();

      //Setting the properties of the Box
      box1.setWidth(100.0);
      box1.setHeight(100.0);
      box1.setDepth(100.0);

      //Setting the position of the box
      box1.setTranslateX(200);
      box1.setTranslateY(150);
      box1.setTranslateZ(0);

      //Setting the drawing mode of the box
      box1.setDrawMode(DrawMode.FILL);

      //Creating a Group object
      Group root = new Group(box1);

      //Creating a scene object
      Scene scene = new Scene(root, 600, 300);

      //Setting camera
      PerspectiveCamera camera = new PerspectiveCamera(false);
      camera.setTranslateX(100);
      camera.setTranslateY(50);
      camera.setTranslateZ(0);
      scene.setCamera(camera);

      //Setting title to the Stage
      stage.setTitle("Drawing a Box");

      //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 BoxDrawModeFill.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls BoxDrawModeFill

执行时,以上程序将生成一个 JavaFX 窗口,其中显示了一个使用 FILL 绘制模式的盒子,如下所示: -

drawing mode fill