对于我目前的项目,我需要一个具有透明背景的大型均匀网格,可以缩放和平移。我最初尝试使用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());
});
然而,这只会使地图向上和向左跳跃,而不是按照预期用鼠标慢慢平移。
答案 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]范围内。减小极限会降低抖动,但这样做的代价是降低响应速度。