当前位置: 首页 > 知识库问答 >
问题:

JavaFX拖动旋转节点

萧卜霸
2023-03-14

在JavaFX中,我试图通过单击并拖动节点来移动它。如果节点不旋转,它工作得很好,但是当我旋转它时,它开始表现得很奇怪。

在45°左右,当我移动它时,它开始抖动,在60°时,它剧烈地来回抖动。在90°时,只要我开始移动节点,它就会飞离屏幕。

下面是我用来旋转和移动节点的代码。它来自连接到节点的鼠标侦听器。

if( event.getEventType() == MouseEvent.MOUSE_RELEASED) {
    ( this.lastEvent == MouseEvent.MOUSE_PRESSED ) {
        if(getRotate() == 0) {
            setRotate(90d);
        } else {
            setRotate(0d);
        }
    }
}
if( event.getEventType() == MouseEvent.MOUSE_DRAGGED ) {
    if(getRotate() == 0) {
        setTranslateX( getTranslateX() + event.getX() );
        setTranslateY( getTranslateY() + event.getY() );
        System.out.print(" trX: " + getTranslateX());
        System.out.print(" evX: " + event.getX());
        System.out.println(" evY: " + event.getY());
    } else {
        setTranslateX(getTranslateX() + event.getX() );
        setTranslateY(getTranslateY() + event.getY() );
        System.out.print(" trX: " + getTranslateX());
        System.out.print(" evX: " + event.getX());
        System.out.println(" evY: " + event.getY());
    }
}

编辑:这是一些示例输出,以及显示不同节点的图片。

未旋转且缓慢向左移动时的输出:

 trX: 333.0 evX: -1.0 evY: 0.0
 trX: 333.0 evX: 0.0 evY: -1.0
 trX: 332.0 evX: -1.0 evY: 0.0
 trX: 332.0 evX: 0.0 evY: -1.0
 trX: 331.0 evX: -1.0 evY: 0.0
 trX: 330.0 evX: -1.0 evY: -1.0
 trX: 330.0 evX: 0.0 evY: 1.0

旋转时缓慢向左移动时的输出:

 trX: 102.0 evX: 142.0 evY: -245.0
 trX: 489.0 evX: 387.0 evY: -102.0
 trX: 978.0 evX: 489.0 evY: 286.0
 trX: 1181.0 evX: 203.0 evY: 776.0
 trX: 607.0 evX: -574.0 evY: 979.0
 trX: -947.0 evX: -1554.0 evY: 405.0
 trX: -2905.0 evX: -1958.0 evY: -1149.0
 trX: -3714.0 evX: -809.0 evY: -3106.0
 trX: -1417.0 evX: 2297.0 evY: -3914.0
 trX: 4795.0 evX: 6212.0 evY: -1617.0
 trX: 12623.0 evX: 7828.0 evY: 4595.0
 trX: 15857.0 evX: 3234.0 evY: 12423.0
 trX: 6668.0 evX: -9189.0 evY: 15658.0
 trX: -18180.0 evX: -24848.0 evY: 6469.0
 trX: -49497.0 evX: -31317.0 evY: -18378.0
 trX: -62436.0 evX: -12939.0 evY: -49694.0
 trX: -25681.0 evX: 36755.0 evY: -62632.0
 trX: 73706.0 evX: 99387.0 evY: -25876.0
 trX: 198969.0 evX: 125263.0 evY: 73512.0
 trX: 250720.0 evX: 51751.0 evY: 198776.0
 trX: 103694.0 evX: -147026.0 evY: 250526.0
 trX: -293858.0 evX: -397552.0 evY: 103501.0
 trX: -794910.0 evX: -501052.0 evY: -294051.0
 trX: -1001912.0 evX: -207002.0 evY: -795103.0
 trX: -413811.0 evX: 588101.0 evY: -1002104.0

外部框是“父”节点,而内部带有文本“nota Gnome”的黑框是我试图移动的节点。鼠标事件侦听器将添加到内部节点。

共有1个答案

耿珂
2023-03-14

我终于自己想出了一个解决办法。

我现在计算节点在场景坐标下的变化量,而不是根据鼠标在前面实例中的位置移动节点。

这是更新后的代码,关于上下文的所有内容都与问题中的内容相同。

if( event.getEventType() == MouseEvent.MOUSE_PRESSED ) {
    this.mouseInSceneX = event.getSceneX();
    this.mouseInSceneY = event.getSceneY();

    Card.this.setCursor(Cursor.MOVE);
}
if( event.getEventType() == MouseEvent.MOUSE_DRAGGED ) {
    double xChange = event.getSceneX() - mouseInSceneX;
    double yChange = event.getSceneY() - mouseInSceneY;

    setTranslateX(getTranslateX() + xChange);
    setTranslateY(getTranslateY() + yChange);

    mouseInSceneX = event.getSceneX();
    mouseInSceneY = event.getSceneY();

    System.out.print(" trX: " + Card.this.getTranslateX());
    System.out.print(" trY: " + Card.this.getTranslateY());
    System.out.print(" cgpX: " + mouseInSceneX);
    System.out.print(" cgpY: " + mouseInSceneY);
    System.out.println(); 
}
 类似资料:
  • 问题内容: 我试图在这个问题中创建一个类似于“奖杯轮”的可旋转节点。到目前为止,我具有甩尾功能,可以使用效果很好的UIPanGestureRecognizer在物理物体上添加角度脉冲。我也可以通过触摸停止旋转。 现在,我试图通过拖动或滑动手势来微调方向盘,这样,如果玩家对最终的效果不满意,就可以手动旋转/拖动/旋转它所喜欢的旋转方式。 目前,我将触摸的位置保存在touchesBegan中,并尝试在

  • 我有一个ImageView,可以用鼠标拖放,点击按钮旋转90度。这两件事在独立完成时都可以工作(因此可以旋转或移动ImageView,而不是两者都可以)。当我旋转ImageView并尝试移动它时,它似乎是随机移动的。 我使用以下方法旋转图像视图: 这导致了我所说的看似随机的运动。 我还尝试使用以下方法旋转ImageView: 位置是图像在屏幕上的位置。宽度和高度是ImageView的宽度和高度。

  • 我正在尝试将一个矩形拖动到VBox,然后从VBox内部再次拖动它。 如果矩形被放置在目标VBox之外的任何位置,那么它应该将其位置恢复到它所属的位置:如果它是左VBox的子级,则将其重置回其中;如果它是右VBox的子级,则将其重置回右VBox内部。 第一部分工作正常,我可以将其拖到VBox并将其添加为子级。第二部分是我遇到问题的地方。 重现问题的步骤:<br>1)将左矩形拖动到右矩形的顶部(在VB

  • 我正在玩JavaFX,在类开始(阶段阶段)我有以下代码: 我如何在不旋转轴的情况下旋转它?我发现并尝试了以下方法: 然而,当我使用改变位置x移动图像时,它也会变换轴 它可能与BuffereImage一起工作,但他们使用不同的图形类绘制它,我不知道如何使它一起工作。 编辑:好的,如何只旋转图像而不旋转整个图形上下文? 已解决:谢谢大家的帮助:))我已经用这个解决了它

  • 如何在Javafx 2.0中制作可拖动节点。JavaFX专门用于GUI目的,仅我需要一些示例,谢谢

  • 我目前正在使用JavaFX ScrollBar控件,它本身运行良好-但是我对拖动拇指时的“动画”不满意。 更具体地说: 当我快速拖动拇指时,快速加速-拇指动画不会立即跟随,但有点“滞后”-当我停止拖动拇指时的相同行为。。。拇指真正开始/追上预定位置需要一秒钟的时间 这不是繁重的布局计算之类的问题,因为我只是单独渲染ScrollBar而没有任何内容。 是否有一些选项可以让这个“加速动画”/“滞后”消