当前位置: 首页 > 面试题库 >

通过拖入javafx 2移动节点的正确方法?

龚勇锐
2023-03-14
问题内容

我正在将具有大量自定义绘画的Swing /
Graphics2D应用程序转换为JavaFX2应用程序。尽管我绝对喜欢新的API,但是在绘制椭圆时我似乎遇到了性能问题,无论鼠标移动到哪里,我都想在鼠标光标下方绘制椭圆。当我稳定地移动鼠标而不是快得不可思议时,我注意到椭圆总是在鼠标轨迹后方几厘米处画出,并且只有在我停止移动光标时才会赶上椭圆。这在只有几个节点的场景图中。在我的Swing应用程序中,我没有这个问题。

我想知道这是绘制鼠标光标所在形状的正确方法吗?

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.SceneBuilder;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Ellipse;
import javafx.scene.shape.EllipseBuilder;
import javafx.stage.Stage;

public class TestApp extends Application {
public static void main(String[] args) {
    launch(args);
}

@Override
public void start(Stage primaryStage) throws Exception {
    Pane p = new Pane();

    final Ellipse ellipse = EllipseBuilder.create().radiusX(10).radiusY(10).fill(Color.RED).build();
    p.getChildren().add(ellipse);

    p.setOnMouseMoved(new EventHandler<MouseEvent>() {
        public void handle(MouseEvent event) {
            ellipse.setCenterX(event.getX());
            ellipse.setCenterY(event.getY());
        }
    });

    Scene scene = SceneBuilder.create().root(p).width(1024d).height(768d).build();
    primaryStage.setScene(scene);

    primaryStage.show();
}
}

小更新: 我已升级到JavaFX 2.2和Java7u6(在Windows 7 64bit上),但是似乎没有什么不同。


问题答案:

您描述的延迟(在鼠标和拖动的形状之间)是一个已知的JavaFX错误:

https://bugs.openjdk.java.net/browse/JDK-8087922

您可以使用未记录的JVM标志来解决(至少在Windows上):

-Djavafx.animation.fullspeed=true

该标志通常用于内部性能测试,这就是为什么它没有记录的原因,但是我们已经使用了几个月了,到目前为止,它还没有出现任何问题。

编辑:

还有另一种类似的方法可以解决此错误,该错误可能会更容易使用CPU。只需关闭Prism的垂直同步即可:

-Dprism.vsync=false

在我们的应用程序中,这些变通办法都可以解决滞后问题;不需要两者都做。



 类似资料:
  • 我正在将一个包含大量自定义绘制的Swing/Graphics2D应用程序转换为JavaFX2应用程序。虽然我非常喜欢这个新的API,但当我在鼠标光标下方绘制椭圆时,无论鼠标移动到哪里,我似乎都会遇到性能问题。当我以稳定的方式移动鼠标时,我注意到椭圆总是在鼠标轨迹的后面几厘米处绘制,只有当我停止移动光标时,椭圆才会出现。这是一个只有少数节点的场景图。在我的Swing应用程序中,我没有这个问题。 我想

  • 本文向大家介绍jsMind通过鼠标拖拽的方式调整节点位置,包括了jsMind通过鼠标拖拽的方式调整节点位置的使用技巧和注意事项,需要的朋友参考一下 jsMind是一个纯javascript实现的思维导图类库,基于html5的canvas实现,以BSD协议开源。 提供了思维导图的显示,编辑等功能,支持freemind数据格式,有丰富的开发接口可供使用,具体功能请访问软件主页进一步了解。 jsMind

  • 本文向大家介绍jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法),包括了jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery插入节点和移动节点的方法。分享给大家供大家参考,具体如下: 1. 插入节点: 效果图: 2. 移动节点: 效果图: 更多关

  • 使用此示例,我想创建带有节点的TreeView,我可以拖动这些节点来更改它们的位置。 我试图实现这个例子,但我在这里遇到了一个问题: 我得到了

  • 在JavaFX中,我试图通过单击并拖动节点来移动它。如果节点不旋转,它工作得很好,但是当我旋转它时,它开始表现得很奇怪。 在45°左右,当我移动它时,它开始抖动,在60°时,它剧烈地来回抖动。在90°时,只要我开始移动节点,它就会飞离屏幕。 下面是我用来旋转和移动节点的代码。它来自连接到节点的鼠标侦听器。 编辑:这是一些示例输出,以及显示不同节点的图片。 未旋转且缓慢向左移动时的输出: 旋转时缓慢

  • 我是 GraphStream 的新手,并且已经构建了一个最小的应用程序,其中 GraphStream 2.0 图形嵌入到 Swing 应用程序中。 在我的应用程序中,当我尝试拖动节点时,鼠标指针显然偏移了大约一半的面板大小(垂直和水平)。 这是代码: 下图显示了在中心拖动矩形节点时的鼠标指针位置(以红色包围)。 关于这个问题的原因有什么想法吗? 编辑: 下面是一个简短的GIF动画,显示了问题(显示