JavaFX pannable GridPane

时间:2016-09-12 20:43:20

标签: java javafx pan gridpane

对于我目前的项目,我需要一个具有透明背景的大型均匀网格,可以缩放和平移。我最初尝试使用ScrollPane及其setPannable(true),但很快发现,即使您拨打setStyle("-fx-background-color: transparent")setStyle("-fx-background: transparent"),滚动窗格背景也会保持不连贯。因此,在消除了这个简单的选项之后,我需要让有问题的GridPane直接成为可能。

我已经尝试了几件事,包括尝试将鼠标位置绑定到GridPane的Translate属性(这根本不起作用),并且我没有获得更有希望的替代工作正确:

    GridPane gridView = new GridPane();
    int x;
    int y;
    gridView.setOnDragEntered( (event) -> {
        x = event.getX();
        y = event.getY();
    });
    gridView.setOnDragDetected( (event) -> {
        gridView.setTranslateX(X - event.getX());
        gridView.setTranslateY(Y - event.getY());
    });

然而,这只会使地图向上和向左跳跃,而不是按照预期用鼠标慢慢平移。

1 个答案:

答案 0 :(得分:0)

管理主要解决这个问题。剩下的一个问题是GridPane在淘汰时相当紧张,但现在它处于可接受的水平。

    int x = 0;
    int y = 0;
    gridView.setOnMouseDragged((event) -> {
        if(x != 0){ //prevent from panning before values are initialized
            gridView.setTranslateX( gridView.getTranslateX() + limit(event.getX() - x, 25));
            gridView.setTranslateY( gridView.getTranslateY() + limit(event.getY() - y, 25));
        }
        x = (int)event.getX();
        y = (int)event.getY();
    });

Limit(double num, double limit)方法将输入数量限制在[-limit,limit]范围内。减小极限会降低抖动,但这样做的代价是降低响应速度。