[英]Setting ScrollPane to the Desired Position
我正在用JavaFX 2.0开发一个项目。
当用户创建如下所示的UML模型时,该场景开始:
当用户单击源代码同步按钮时,应用程序将在UML模型周围的Bubbles中显示相关的源代码,如下所示:
但是,您可能会意识到,在顶部创建的气泡并不完全适合窗格。 窗格的所需视图应如下所示:
即使我知道我应该使用HValue
和VValue
属性来完成此操作。 我不明白如何设置ScrollPane
这些新值。
ScrollPane的大小为8000 x 8000,我通过调用rescaleView()函数创建了一个不可见的矩形,该矩形覆盖了所有UML模型和气泡。 因此,根据该矩形的值,我正在重新缩放ScrollPane,但无法再次移动视口中心。 这是重新缩放的功能:
private void rescaleView() {
double MARGIN = 5.0;
List<BubbleView> bubbleViews = new ArrayList<>(diagramController.getAllBubbleViews());
double xMin = bubbleViews.get(0).getX();
double yMin = bubbleViews.get(0).getY();
double xMax = bubbleViews.get(0).getX() + bubbleViews.get(0).getWidth();
double yMax = bubbleViews.get(0).getY() + bubbleViews.get(0).getHeight();
if(bubbleViews.size() > 0) {
for(int i = 1; i < bubbleViews.size(); i++) {
if((bubbleViews.get(i).getX() + bubbleViews.get(i).getWidth()) > xMax) {
xMax = bubbleViews.get(i).getX() + bubbleViews.get(i).getWidth();
}
if(bubbleViews.get(i).getX() < xMin) {
xMin = bubbleViews.get(i).getX();
}
if((bubbleViews.get(i).getY() + bubbleViews.get(i).getHeight()) > yMax) {
yMax = bubbleViews.get(i).getY() + bubbleViews.get(i).getHeight();
}
if(bubbleViews.get(i).getY() < yMin) {
yMin = bubbleViews.get(i).getY();
}
}
double toBeScaled = Math.min((Math.max(diagramController.getScrollPane().getWidth(), diagramController.getScrollPane().getHeight()) / Math.max((xMax - xMin), (yMax - yMin))),(Math.min(diagramController.getScrollPane().getWidth(), diagramController.getScrollPane().getHeight()) / Math.min((xMax - xMin), (yMax - yMin)))) * 100;
diagramController.getGraphController().zoomPane(toBeScaled - MARGIN);
diagramController.getGraphController().center(xMin, yMin);
}
}
但是下面的center(x,y)
函数不会使视口居中:
public void center(double x, double y) {
ScrollPane scrollPane = diagramController.getScrollPane();
double xScroll = x / 8000; //8000 is the size of aDrawPane set in view.classDiagramView.fxml
double yScroll = y / 8000;
scrollPane.setHvalue(xScroll);
scrollPane.setVvalue(yScroll);
}
我应该如何设置这些setHValue
和setVValue
?
提前致谢。
我不确定它是否有效。
diagramController.getGraphController().center((xMax + xMin) / 2, (yMax + yMin) / 2);
double xScroll = (x - scrollPane.getWidth() / 2) / (8000 - scrollPane.getWidth());
double yScroll = (y - scrollPane.getHeight() / 2) / (8000 - scrollPane.getHeight());
并且toBeScaled
似乎有不受欢迎的情况,例如内容宽度很长的垂直滚动条。 如果误解,请忽略下面的代码。
final double scrollPaneWidth = diagramController.getScrollPane().getWidth();
final double scrollPaneHeight = diagramController.getScrollPane().getHeight();
final double contentsWidth = xMax - xMin;
final double contentsHeight = yMax - yMin;
double toBeScaled = Math.min(scrollPaneHeight / contentsHeight, scrollPaneWidth / contentsWidth) * 100;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.