在拖动Javafx上移动形状 - 形状保持重置

时间:2017-01-11 03:40:17

标签: java javafx

我试图让一个简单的矩形移动拖动。我让它移动,但当我再次尝试拖动时,它首先恢复到初始拖动之前的初始位置。我尝试过使用StackPane,FlowPane,Pane和AnchorPane。

  public View getView() {
        View view = new View("Test View");
        view.setName(name);
        Pane pane = new Pane();

        rect.setOnMousePressed((MouseEvent me) -> {
            xVal = me.getSceneX();
            yVal = me.getSceneY();
            System.out.println("PRESSED_" + Double.toString(rect.getX()));
        });

        rect.setOnMouseReleased((MouseEvent me) -> {
            System.out.println("RELEASE_" + Double.toString(rect.getX()));
        });

        rect.setOnMouseDragged((MouseEvent me) ->{
            final double diffX = me.getSceneX() - xVal;
            final double diffY = me.getSceneY() - yVal;
            System.out.println("SET_" + Double.toString(rect.getX()));
            rect.setX(diffX);
            rect.setY(diffY);
        });

        pane.getChildren().add(rect);
        view.setCenter(pane);
        return view;
    }

注意: rectxValyVal都是类属性。

问题是我可以移动矩形就好了。然而,当我再次尝试移动时,矩形似乎跳回到矩形的原始点。您可以在下图中看到它似乎还原的位置:

Rectangle On Drag Issue

注意: diffXdiffY final setTranslate()这一事实并非如此。

另一个注意事项:我也尝试了getTransforms().add()以及library(rvest) library(dplyr) pg <- read_html("http://www.svs.cl/institucional/mercados/consulta.php?mercado=S&Estado=VI&consulta=CSVID&_=1484105706447") html_nodes(pg, "table") %>% html_table() %>% .[[1]] %>% tbl_df() %>% select(1:2) ## # A tibble: 36 × 2 ## R.U.T. Entidad ## <chr> <chr> ## 1 99588060-1 ACE SEGUROS DE VIDA S.A. ## 2 76511423-3 ALEMANA SEGUROS S.A. ## 3 96917990-3 BANCHILE SEGUROS DE VIDA S.A. ## 4 96933770-3 BBVA SEGUROS DE VIDA S.A. ## 5 96573600-K BCI SEGUROS VIDA S.A. ## 6 96656410-5 BICE VIDA COMPAÑIA DE SEGUROS S.A. ## 7 96837630-6 BNP PARIBAS CARDIF SEGUROS DE VIDA S.A. ## 8 76418751-2 BTG PACTUAL CHILE S.A. COMPAÑIA DE SEGUROS DE VIDA ## 9 76477116-8 CF SEGUROS DE VIDA S.A. ## 10 99185000-7 CHILENA CONSOLIDADA SEGUROS DE VIDA S.A. ## # ... with 26 more rows ......

1 个答案:

答案 0 :(得分:0)

好的,所以我正在摆弄它并且我发现每次按下时,矩形的X和Y坐标都在(0,0)校准。所以我所要做的就是在初始鼠标按下事件中将xValyVal设置为0。但是,这会使xValyVal变得微不足道。因此,它们可以被删除。不确定这是否是最佳解决方案,但它对我有用:

    rect.setOnMousePressed((MouseEvent me) -> {
        System.out.println("PRESSED_" + Double.toString(rect.getX()));
    });

    rect.setOnMouseReleased((MouseEvent me) -> {
        System.out.println("RELEASE_" + Double.toString(rect.getX()));
    });

    rect.setOnMouseDragged((MouseEvent me) ->{
        double diffX = me.getX() - rect.getWidth() / 2;
        double diffY = me.getY() - rect.getHeight() / 2;
        System.out.println("SET_" + Double.toString(rect.getX()));
        rect.setX(diffX);
        rect.setY(diffY);
    });