JavaFX拖动旋转节点

时间:2015-10-09 16:30:53

标签: java javafx rotation drag

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

在45°左右,当我移动它时会开始抖动,在60°时它猛烈地来回摇晃。当我开始移动它时,节点在90°处飞过屏幕。

以下是我用来旋转和移动节点的代码。它来自连接到节点的MouseListener。

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

以下是该计划的图片:
Picture of program

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

1 个答案:

答案 0 :(得分:1)

我终于想出了一个解决方案。

我不是根据鼠标基于其实例位置的位置来移动节点,而是根据场景中的坐标计算它的变化程度。

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

./manage.py migrate