3D 应用程序中的 JavaFx 2D 部分

2023-12-07

我编写的应用程序有一个小问题。

我想要有一个 3D 字段,并在右侧有一个包含 2D 组件(如按钮)的工具栏。

我尝试简单地将这些组件添加到我的根组中,但是无法读取文本,并且它们与所有其他组件一起移动。

那么,如何区分这两个区域呢?可能有两个场景?

感谢您提供的每一个提示:)


最好的方法是使用SubScene对于 3D 节点。您可以将所有 2D 内容保留在其之上,而不会出现渲染问题。

您可以阅读有关SubScene API here.

这是您可以使用此节点执行的操作的一个小示例:

private double mousePosX, mousePosY;
private double mouseOldX, mouseOldY;
private final Rotate rotateX = new Rotate(-20, Rotate.X_AXIS);
private final Rotate rotateY = new Rotate(-20, Rotate.Y_AXIS);

@Override
public void start(Stage primaryStage) throws Exception {

    // 3D
    Box box = new Box(5, 5, 5);
    box.setMaterial(new PhongMaterial(Color.GREENYELLOW));

    PerspectiveCamera camera = new PerspectiveCamera(true);
    camera.getTransforms().addAll (rotateX, rotateY, new Translate(0, 0, -20));

    Group root3D = new Group(camera,box);

    SubScene subScene = new SubScene(root3D, 300, 300, true, SceneAntialiasing.BALANCED);
    subScene.setFill(Color.AQUAMARINE);
    subScene.setCamera(camera);

    // 2D
    BorderPane pane = new BorderPane();
    pane.setCenter(subScene);
    Button button = new Button("Reset");
    button.setOnAction(e->{
        rotateX.setAngle(-20);
        rotateY.setAngle(-20);
    });
    CheckBox checkBox = new CheckBox("Line");
    checkBox.setOnAction(e->{
        box.setDrawMode(checkBox.isSelected()?DrawMode.LINE:DrawMode.FILL);
    });
    ToolBar toolBar = new ToolBar(button, checkBox);
    toolBar.setOrientation(Orientation.VERTICAL);
    pane.setRight(toolBar);
    pane.setPrefSize(300,300);

    Scene scene = new Scene(pane);

    scene.setOnMousePressed((MouseEvent me) -> {
        mouseOldX = me.getSceneX();
        mouseOldY = me.getSceneY();
    });
    scene.setOnMouseDragged((MouseEvent me) -> {
        mousePosX = me.getSceneX();
        mousePosY = me.getSceneY();
        rotateX.setAngle(rotateX.getAngle()-(mousePosY - mouseOldY));
        rotateY.setAngle(rotateY.getAngle()+(mousePosX - mouseOldX));
        mouseOldX = mousePosX;
        mouseOldY = mousePosY;
    });

    primaryStage.setScene(scene);
    primaryStage.setTitle("3D SubScene");
    primaryStage.show();
}

SubScene

对于更复杂的场景,请查看3DViewerOpenJFX 项目下的应用程序。

3DViewer

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3D 应用程序中的 JavaFx 2D 部分 的相关文章

  • JavaFX FXML 控制器 - 构造函数与初始化方法

    My Application类看起来像这样 public class Test extends Application private static Logger logger LogManager getRootLogger Overri
  • JavaFX检测同时按下的多个键盘按键

    正如标题所说 我想检测同时按下的多个键盘按键 同时地 并被按下 同时地 一段时间 我正在尝试添加多个事件处理程序Scene但它不起作用 EventHandler
  • Gridpane 中的 JavaFx 图像会大幅降低性能

    我想创建一个 GridPane 嵌套在 ScrollPane 中 在其中动态添加单元格到 GridPane 每个单元格都包含一个带有背景图像的 VBox 一些标签和一个复选框 问题是 GridPane 可以包含数百个 VBox 在我的例子中
  • 有没有办法为 GridPane 中的元素添加动画效果

    我正在尝试为元素添加动画GridPane 我有课Unit这代表了我想要移动的东西 public class Unit private Text text private Rectangle rectangle private StackPa
  • 如何使ListView的宽度适合其单元格的宽度

    我有一个带有自定义单元工厂的 ListView 我计算单元格的最大值 minWidth 并将其设置为整个 ListView 的 minWidth 因此 受布局中其他区域约束的 ListView 会精确地缩小到 minWidth 但它所容纳的
  • 如何在 Javafx 中对齐对话框窗格的“确定”按钮?

    我想对齐 即位置中心 对话框窗格的 确定 按钮 我已经尝试过下面的代码 但它不起作用 Dialog dialog new Dialog DialogPane dialogPane dialog getDialogPane dialogPan
  • 从 javaFX 场景拖放到 Windows 资源管理器

    有什么方法可以从 javaFX 场景拖放到 Windows 资源管理器吗 就在这里 您应该使用 onDragDetected 函数来启动拖放事件 并使用 onDragDone 函数在完成拖放后执行您想要的任何操作 这里有一个例子 final
  • 添加样式后如何重置回默认CSS?

    基本上 我通过添加如下样式类来更改 javafx 中文本字段的 css textfield getStyleClass add textfieldstyle 但后来我希望能够将其恢复到原来的样子 但由于本例中的原始外观是 JavaFX 的默
  • 如何在javafx中通过事件传递参数?

    我有以下示例 我想将参数 文本 与事件一起传递 当单击按钮 bla 时 我该怎么做 EventHandler
  • 像耐心/克朗代克纸牌游戏一样拖动节点

    我正在做克朗代克游戏 逻辑一切正常 我只是在使用 javafx 中的 UI 时遇到问题 我一直在尝试从 桌面堆 周围移动 拖动卡片 但没有达到预期的结果 我的卡片是一个 ImageView 里面有一个图像 这些卡片位于窗格内 Pane ta
  • FXML load() 期间出现 JavaFX IllegalAccessException

    我有一个由以下代码调用的对话框窗口 DialogController是使用模式对话框窗口的辅助类 它主要将控制器引用与其窗口捆绑在一起 void handleServicesEdit ActionEvent event throws IOE
  • 有没有办法设置独立 TableView 列的样式?

    我可以使用 CSS 来设置单元格样式 但如果我只想为一列使用不同的样式 例如使用不同的文本颜色 怎么办 也许我错过了一些东西 你应该使用TableColumn setCellFactory http docs oracle com java
  • JavaFX 中 ImageView 的顺序转换

    我已经看过了如何在 javafx 2 1 中等待转换结束 https stackoverflow com questions 11188018 how to wait for a transition to end in javafx 2
  • 如何使用 Java 11 和 JavaFX 11 运行 ControlsFX 示例应用程序

    ControlFX 网站 http fxexperience com controlsfx says 如果您想使用 ControlsFX 示例应用程序 只需 下载 ControlsFX 版本并在上运行以下命令 命令提示符 请务必将 替换为实
  • javafx中的stackpane和root有什么区别?

    我正在练习javafx做饼图 以下是开发饼图的代码 如果我这样做Group并与StackPane 我发现输出没有区别 我已经评论了组部分 只是徘徊两者之间的区别 import javafx application Application i
  • JavaFX 中的内部框架

    我找到了这个内部框架的例子 http docs oracle com javase tutorial uiswing components internalframe html http docs oracle com javase tut
  • JavaFX - Outlook 附件 - DnD

    您好 我需要一个 DnD 解决方案来将 Outlook 邮件附件拖到堆栈窗格中 JavaFX Outlook 2010 stackpaneDragAndDropZone setOnDragOver DragEvent event gt Dr
  • 从剪贴板获取图像 Awt 与 FX

    最近 我们的 Java FX 应用程序无法再从剪贴板读取图像 例如 用户在 Microsofts Paint 中选择图像的一部分并按复制 我不是在谈论复制的图像文件 它们工作得很好 我很确定它过去已经有效 但我仍然需要验证这一点 尽管如此
  • 按日期对图表中的 X 轴进行排序 - JavaFX

    如何按日期对折线图 X 轴进行排序 现在我的折线图看起来像这样 我试图剪切日期并将其转换为 int 但现在我不知道该怎么办 datesToCompare addAll LastHoursAndDates keySet dates in St
  • 如何根据 JavaFX 8 中的特定祖先获取节点边界?

    我在 AnchorPane 中添加了一个图表 我想获取其绘图的范围 图表 我用青色标记 这样我就可以在它上面添加一些文本 但我应该根据它的祖先知道它的确切边界 如果我手动执行此操作 则在调整大小等时更改节点的填充大小时 我可能会失败 imp

随机推荐

  • PHP:每 10 秒检查 mysql 数据库是否有新行

    我正在进行 php 聊天 并开始 php 检查数据库部分 因此 当用户在聊天中输入内容时 它会记录在 MySQL 数据库中 我如何每 10 秒检查一次数据库 以便一个用户的聊天会更新为其他用户的新消息 我知道你可以使用 ajax 请求到一个
  • php 显示错误

    我已经更新了我的代码 php 并改进了我的问题 我有一个登录表单 当我输入错误的密码时 我没有出现此错误 您还没有注册或密码错误 我什么都没有 什么也没有出现 这是我的代码 php 我的数据是 mongodb
  • 将另一个类作为类的静态属性

    阅读下面的示例 但不要过多关注EventEmitter请继承 它只是显示了class syntax 我意识到这个例子是不正确的 ES2015 因为没有这样的东西static class陈述 在 ES2015 中实现这样的功能最简洁的语法方式
  • html5中如何对输入时间采取步骤和限制?

    我需要自定义数据输入7 to 23 hours并采取10 minute步骤在input time就像下面的例子 input time gt gt gt 07 10 07 20 07 30 22 40 22 50 23 00 请帮我 您需要使
  • Go 中按空格分割字符串?

    给定一个输入字符串 例如 word1 word2 word3 word4 在 Go 中将其拆分为字符串数组的最佳方法是什么 请注意 可以有any每个单词之间的空格或 unicode 间距字符数 在Java中我只会使用someString t
  • PHP/MySQL 多级菜单

    我正在尝试使用 PHP 创建动态多级菜单 从 MySQL 数据库获取数据 我已经设法用以下格式在 php 数组中订购菜单项 Array 1 gt Array id gt 1 ubicacion gt top a nivel gt 1 par
  • VBA xmlhttprequest循环而不关闭连接

    我正在 VBA 中使用 xmlhttp 连接到 API 问题是我需要使用相同的 API 链接多次创建循环 唯一的区别是我发送了不同的 JSON 字符串 是否可以仅打开一次连接并发送标头和身份验证 然后多次发送数据并接收响应 主要目的是提高代
  • 有没有办法保存最大 1 MB 的“消息”集合并将结果写入 JSON/CSV 文件

    我有一个阻塞队列 它不断通过某些应用程序获取消息 现在在 asp net 应用程序中 我尝试使用该队列并将输出写入 CSV JSON 文件 在这里 我想保存最多 1MB 的消息 这些消息从阻塞队列接收 然后将其写出 现在再次保存 1MB 的
  • 如何在一个适配器上应用多个过滤器?

    我有一个 listView 和一个搜索字段 它调用我的适配器的 getFilter filter keyword 函数 它工作得很好 但我想添加另一个过滤器来搜索 listViews 对象的不同标签 所以我的适配器需要两个过滤器 对此最好的
  • IntelliJ 的嵌入式终端无法正确加载我的 Fish shell 配置

    IntelliJ 中的 Fish 配置未正确加载 并且我看到有关路径未正确设置的警告 set Warning PATH entry set Did you mean set PATH PATH 因此 IntelliJ 似乎能够获取位于 co
  • C# 导出到excel

    这是将数据导出到现有 xls 工作表的最佳方式 我需要支持很多版本的excel 如果我使用 Visual basic 我将使用 CreateObject Excel application 代码来完成我需要的操作 C 中的等价物是什么 我希
  • AnyLogic 中的系统动力学 - 斐波那契序列 [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我在 AnyLogic 中有一个系统动力学模型 我试图在其中对斐波那契序列进行建模 然而 由于某种原因 我的结果与预期不同 代替 1 1 2 3 5 8 13 I get 1 2 1379
  • 如何在重命名后找到存储库的新位置

    如果用户将存储库重命名为foo bar git to foo baz git通过 GitHub 的 UI 我如何通过 API 检测到这一点 目前 如果我像这样调用 API 我会收到 404 GET repos foo bar 如何找到新的存
  • 使用正则表达式根据用户名的最后一个字母更改文本

    我希望根据用例更改用户名的结尾 在将运行的语言系统中 名称结尾取决于其使用方式 因此需要定义名称的所有结尾并定义它们的替换 建议使用 gsub 正则表达式在字符串中搜索和替换 根据用户名的最后一个字母更改文本 name surname gs
  • 在 python 中加载 DLL 时出错,不是有效的 win32 应用程序 [重复]

    这个问题在这里已经有答案了 我正在尝试在 python 中加载 DLL 来调用函数 import ctypes from ctypes import dsusb ctypes WinDLL c python27 dsusb dll 我的堆栈
  • Windows 上 R 中的 UTF-8 支持

    由于Windows10添加了新功能 Beta 使用Unicode UTF 8支持全球语言 我认为R可以将语言环境转换为UTF 8 但是 当我尝试将系统区域设置更改为 UTF 8 时 Sys setlocale locale Japanese
  • 我可以使用什么 SQL 从我的付款数据中检索计数?

    计数标准 按学校服务类型按月 年对每所学校的学生人数 通过唯一的学生 ID 进行索引 进行 真实 计数 我目前正在使用 MS Access 我需要能够提取具有与下面的示例数据类似的数据的数据库的计数 每一行都是一个付款观察 样本数据 Stu
  • 用于文件上传的 javascript/flash 库,具有文件大小限制和进度条

    有没有用于此目的的 主流 库 普遍传播 维护良好 有记录等 我发现了这些 使用闪光灯 上传 版本不多 最新为 12 2010 没有文档 SWF上传 最新版本 03 2010 文档 奇特上传 看起来有问题 php文件上传器 看起来很重量级 而
  • 在 Teradata 中满足阈值后,将一列数字分为 30 个组

    考虑代表 事件之间的时间 的列 5 40 3 6 0 9 0 4 5 18 2 4 3 2 我想将它们分成 30 个桶 但桶会重置 期望的结果 0 1 1 1 1 1 1 1 1 2 2 2 2 2 这是因为 当我们累计到 30 时 我们会
  • 3D 应用程序中的 JavaFx 2D 部分

    我编写的应用程序有一个小问题 我想要有一个 3D 字段 并在右侧有一个包含 2D 组件 如按钮 的工具栏 我尝试简单地将这些组件添加到我的根组中 但是无法读取文本 并且它们与所有其他组件一起移动 那么 如何区分这两个区域呢 可能有两个场景