Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将ScrollPane设置到所需位置_Java_Javafx - Fatal编程技术网

Java 将ScrollPane设置到所需位置

Java 将ScrollPane设置到所需位置,java,javafx,Java,Javafx,我正在用JavaFX2.0开发一个项目 当用户创建如下所示的UML模型时,场景开始: 当用户单击“源代码同步”按钮时,应用程序将在UML模型周围的气泡中显示相关的源代码,如下所示: 但是,正如您可能意识到的,在顶部创建的气泡并不完全适合窗格。所需的窗格视图应如下所示: 即使我知道我应该使用HValue和VValue属性来实现这一点。我不明白如何设置滚动窗格的这些新值 滚动窗格的大小是8000 x 8000,我正在创建一个不可见的矩形,通过调用rescaleView()函数覆盖所有UML模型

我正在用JavaFX2.0开发一个项目

当用户创建如下所示的UML模型时,场景开始:

当用户单击“源代码同步”按钮时,应用程序将在UML模型周围的气泡中显示相关的源代码,如下所示:

但是,正如您可能意识到的,在顶部创建的气泡并不完全适合窗格。所需的窗格视图应如下所示:

即使我知道我应该使用
HValue
VValue
属性来实现这一点。我不明白如何设置
滚动窗格
的这些新值

滚动窗格的大小是8000 x 8000,我正在创建一个不可见的矩形,通过调用rescaleView()函数覆盖所有UML模型和气泡。因此,根据这个矩形的值,我正在重新缩放滚动窗格,但无法再次移动视口中心。以下是用于重新缩放的功能:

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);
    }
}
如何设置这些
setHValue
setVValue


提前谢谢。

我不确定它是否有效

diagramController.getGraphController().center((xMax + xMin) / 2, (yMax + yMin) / 2);

而且
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;

它工作得很好!谢谢!顺便说一句,你说的toBeScaled的错误是对的。我已经按照你说的改变了。
double xScroll = (x - scrollPane.getWidth() / 2) / (8000 - scrollPane.getWidth());
double yScroll = (y - scrollPane.getHeight() / 2) / (8000 - scrollPane.getHeight());
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;