【问题标题】:JavaFX 2.2 - How to adapt scrolling after zooming inside scrollPane?JavaFX 2.2 - 如何在 scrollPane 内缩放后调整滚动?
【发布时间】:2016-09-14 19:53:00
【问题描述】:

我正在开发一个使用 JavaFX 和 CSS 制作的应用程序。我已经到了必须在 scrollPane(在 GridPane 内)内显示图片的地步。我需要放大这张照片。我成功地按预期使用了触控板的多点触控功能。

但是在放大时,滚动条没有显示或保持在加载时的状态。 (显示(或不显示)条形取决于图片的大小。)

缩小时也会发生同样的事情。

图片会自己说话。

你可以注意到这里显示了垂直滚动条,因为图片太长了。

没有显示滚动条。除了垂直的,它是相同的状态。

缩小时可以很容易地看到,这也是一样的。

所以。如何设置条形以适应缩放?我希望能够用我的触控板“移动”图片。 (滚动条通过多点触控手势运行,并且可以正常工作。)

这是我的代码的一部分:

    Tab newTab = new Tab(file.getName());
    newTab.setClosable(true);
    // Create ImageView of Picture
    ImageView imageView = new ImageView();
    // Add ImageView to tab

    scrollPane = new ScrollPane();

    /*
     * ZOOM 
     */

    zoomProperty = new SimpleDoubleProperty(200);

    zoomProperty.addListener(new InvalidationListener() {
        @Override
        public void invalidated(Observable arg0) {
            imageView.setFitWidth(zoomProperty.get() * 4);
            imageView.setFitHeight(zoomProperty.get() * 3);
        }
    });

    scrollPane.setOnZoom(new EventHandler<ZoomEvent>() {
        @Override
        public void handle(ZoomEvent event) {
            imageView.setScaleX(imageView.getScaleX() * event.getZoomFactor());
            imageView.setScaleY(imageView.getScaleY() * event.getZoomFactor());
            event.consume();
        }
    });

    scrollPane.setOnZoomFinished(new EventHandler<ZoomEvent>() {
        @Override
        public void handle(ZoomEvent event) {
            // I want to add something here but don't know what.
            event.consume();
        }
      });

    /*
     * END ZOOM
     */

    imageView.setImage(new Image(file.toURI().toString()));
    imageView.preserveRatioProperty().set(true);
    scrollPane.setContent(imageView);       
    newTab.setContent(scrollPane);
    TabView.addTab(newTab);
}

非常感谢。如果我忘记了一些,请不要犹豫,要求确认或其他信息。

【问题讨论】:

    标签: css javafx scroll zooming pane


    【解决方案1】:

    我意识到我没有使用imageview.setFitWidth() 来调整 Imageview 的大小,具体取决于它瞬间的边界。滚动窗格正在适应自己。它现在可以工作了,但是缩放效果差得多。

    【讨论】:

    • 也可以使用imageView.setSmooth(true);
    【解决方案2】:

    将 ImageView 放在一个 Group 中并将该组添加到 ScrollPane。

    【讨论】:

      猜你喜欢
      • 2016-11-30
      • 2021-05-04
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 2017-01-18
      相关资源
      最近更新 更多