Полосы прокрутки / полоса прокрутки исчезают при загрузке изображения и увеличивают масштаб в JavaFX - PullRequest
0 голосов
/ 05 февраля 2019

Это приложение JavaFX.Существует imageView, вложенный в область прокрутки, и перед загрузкой / отображением изображения видны полосы прокрутки.Однако, когда пользователь загружает изображение или нажимает / увеличивает изображение, полосы прокрутки исчезают.Это оставляет видимой только часть изображения.

Я очень новый разработчик, поэтому я могу использовать неправильные методы для изменения размера изображения.Я также мог бы вызывать метод не на том объекте (в этом случае действует сам imageView, а не объект изображения, нарисованный на нем).

Вот метод масштабирования, который я построил:

// a method that allows user to zoom in and out on the image
    @FXML
    private void zoomImage(MouseEvent event) {
        if (imageDisplay != null) {
            if (imageDisplay.getScaleX() == 1.0 & imageDisplay.getScaleY() 
== 1.0) {
                imageDisplay.setScaleX(3.0);
                imageDisplay.setScaleY(3.0);
            } else {
                imageDisplay.setScaleX(1.0);
                imageDisplay.setScaleY(1.0);
            }
        } else {
            return;
        }
    }

(Вот FXML для imageView и Scroll Pane, оба из которых находятся в VBox)

<ScrollPane>
    <content>
         <ImageView fx:id="imageDisplay" fitHeight="300.0" fitWidth="650.0" 
onDragDropped="#handleImageDrop" onDragOver="#handleImageDrag" 
onMouseClicked="#zoomImage" pickOnBounds="true" preserveRatio="true" />
    </content>
</ScrollPane>

Я ожидаю, что полосы прокрутки останутся видимыми после загрузки и увеличения изображения в.

1 Ответ

0 голосов
/ 05 февраля 2019

Вы можете установить полосу прокрутки как всегда видимую из fxml, добавив hbarPolicy="ALWAYS" vbarPolicy="ALWAYS"> по умолчанию или не указано значение AS_NEEDED, поэтому они могут не отображаться

Пример.

<ScrollPane hbarPolicy="ALWAYS" vbarPolicy="ALWAYS">
    <content>
        <ImageView fx:id="imageDisplay" fitHeight="300.0" fitWidth="650.0"
                   onDragDropped="#handleImageDrop" onDragOver="#handleImageDrag"
                   onMouseClicked="#zoomImage" pickOnBounds="true" preserveRatio="true" />
    </content>
</ScrollPane>

В качестве альтернативы вы можете сделать это с кодом, например

scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);
...