为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 SceneAntialiasing 设置为在 FXML 文件中创建的 SubScene?

如何将 SceneAntialiasing 设置为在 FXML 文件中创建的 SubScene?

qq_花开花谢_0 2023-03-23 16:25:13
我一直在 JavaFX 中玩 3D。我在我的演示应用程序中添加了SubScene一些Box,但它们的边缘Box很脏。如何在不在SceneAntialiasing.BALANCED构造函数中使用的情况下平滑它们?我已经看到有可能添加antiAliasing=""到 FXML 文件中,但是我不知道应该将什么作为参数。WordBALANCED不工作。Controller.javaimport javafx.animation.KeyFrame;import javafx.animation.KeyValue;import javafx.animation.Timeline;import javafx.fxml.FXML;import javafx.scene.*;import javafx.scene.layout.AnchorPane;import javafx.scene.paint.Color;import javafx.scene.paint.PhongMaterial;import javafx.scene.shape.Box;import javafx.scene.transform.Rotate;import javafx.scene.transform.Translate;import javafx.util.Duration;public class Controller{    @FXML    private SubScene subscene;    @FXML    private AnchorPane pane;    private Box box= new Box();    private PerspectiveCamera camera = new PerspectiveCamera(true);    private Group group = new Group();    final Rotate rx = new Rotate(0, Rotate.X_AXIS);    final Rotate ry = new Rotate(0, Rotate.Y_AXIS);    final Rotate rz = new Rotate(0, Rotate.Z_AXIS);    private Timeline animation;    @FXML    void initialize() {        box.setMaterial(new PhongMaterial(Color.ORANGE));        box.setDepth(10);        box.setWidth(10);        box.setHeight(10);        rx.setAngle(90);        ry.setAngle(25);        box.getTransforms().addAll(rz, ry, rx);        group.getChildren().add(box);        animation = new Timeline();        animation.getKeyFrames().addAll(                new KeyFrame(Duration.ZERO,                        new KeyValue(box.depthProperty(), 0d),                        new KeyValue(box.translateYProperty(),400d)),                new KeyFrame(Duration.seconds(5),                        new KeyValue(box.depthProperty(), 800d),                        new KeyValue(box.translateYProperty(), 0d)));        animation.setCycleCount(Timeline.INDEFINITE);        camera.getTransforms().add(new Translate(0, 0, -80));        camera.getTransforms().addAll (                new Rotate(-35, Rotate.X_AXIS),                new Translate(0, 0, 10)    }}还有其他方法可以实现吗?
查看完整描述

1 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

由于SceneAntialiasing不是枚举,因此不能在属性中使用常量名称。但是,SubScene构造函数确实使用 注释SceneAntialiasing参数@NamedArg,这意味着它可以在通过 FXML 创建时注入。您只需要结合使用一个元素而fx:constant不是一个属性。例如:


<?xml version="1.0" encoding="UTF-8"?>


<?import javafx.scene.SubScene?>

<?import javafx.scene.SceneAntialiasing?>


<SubScene xmlns="http://javafx.com/javafx/12.0.1" xmlns:fx="http://javafx.com/fxml/1">

    <antiAliasing>

        <SceneAntialiasing fx:constant="BALANCED"/>

    </antiAliasing>

</SubScene>

加载上面的内容:


import java.io.IOException;

import javafx.application.Application;

import javafx.application.Platform;

import javafx.fxml.FXMLLoader;

import javafx.scene.SubScene;

import javafx.stage.Stage;


public final class App extends Application {


    @Override

    public void start(Stage primaryStage) throws IOException {

        SubScene scene = FXMLLoader.load(getClass().getResource(...));

        System.out.println(scene.getAntiAliasing());

        Platform.exit();

    }


}

结果被BALANCED打印出来。


查看完整回答
反对 回复 2023-03-23
  • 1 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信