Как отобразить изображение больше экрана с помощью scrollPane JavaFX

Как можно использовать 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;
    }

}

person Politic Revolutionnaire    schedule 14.09.2016    source источник
comment
У меня есть, но он не позволяет панорамировать, хотя я включил эту опцию. Кроме того, он не показывает полосы прокрутки, даже если я включу эту опцию.   -  person Politic Revolutionnaire    schedule 14.09.2016
comment
Отредактированный вопрос, чтобы включить мой код.   -  person Politic Revolutionnaire    schedule 14.09.2016


Ответы (1)


Вы устанавливаете только 2 из 4 привязок для ScrollPane, поэтому размер 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;
}
person fabian    schedule 14.09.2016