如何使用scrollPane JavaFX显示大于屏幕的图像

时间:2016-09-14 10:44:12

标签: java javafx imageview scrollpane

如何使用scrollPane在全屏应用程序中显示大于屏幕的图像?我有一个大约8000x3800像素的图像,我希望能够移动和整个图像交互,而无需调整大小。如果您希望了解我的代码的具体信息,或者一般只是询问。

public class SourceCodeVersion8 extends Application{

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        AnchorPane mapAnchorO = addMapAnchor();
        Scene mapScene = new Scene(mapAnchorO);
        primaryStage.setScene(mapScene);
        primaryStage.setFullScreen(true);
        primaryStage.setResizable(false);
        primaryStage.show();
    }

    //Creates an AnchorPane for the map
    private AnchorPane addMapAnchor()
    {
        AnchorPane mapAnchor = new AnchorPane();
        ScrollPane mapScrollO = addMapScroll();
        mapAnchor.getChildren().add(mapScrollO);
        AnchorPane.setLeftAnchor(mapScrollO, 0.0);
        AnchorPane.setTopAnchor(mapScrollO, 0.0);
        return mapAnchor;
    }

    //Creates an ImageView for the map
    private ImageView addMapView()
    {
        Image mapImage = new Image("WorldProvincialMap-v1.01.png");
        ImageView mapView = new ImageView(mapImage);
        return mapView;
    }

    //Creates a scrollPane for the map
    private ScrollPane addMapScroll()
    {
        ScrollPane mapScroll = new ScrollPane();
        ImageView mapViewO = addMapView();
        mapScroll.setContent(mapViewO);
        mapScroll.setPannable(true);
        return mapScroll;
    }

}

1 个答案:

答案 0 :(得分:3)

您只为ScrollPane设置了4个锚点中的2个,这就是为什么ScrollPane永远不会调整大小,只是调整大小以允许显示整个图像。

因此不需要滚动条,无法进行平移。

您可以通过设置右侧和底部锚点来解决此问题。或者直接使用ScrollPane作为Scene的根目录。

private AnchorPane addMapAnchor() {
    AnchorPane mapAnchor = new AnchorPane();
    ScrollPane mapScrollO = addMapScroll();
    mapAnchor.getChildren().add(mapScrollO);
    AnchorPane.setLeftAnchor(mapScrollO, 0.0);
    AnchorPane.setTopAnchor(mapScrollO, 0.0);
    AnchorPane.setBottomAnchor(mapScrollO, 0.0);
    AnchorPane.setRightAnchor(mapScrollO, 0.0);
    return mapAnchor;
}