2016-09-14 3 views
0

Я работаю над приложением, созданным с помощью JavaFX и CSS. Я достиг точки, где мне нужно отобразить изображение внутри scrollPane (находящегося внутри GridPane). Мне нужно увеличить изображение. Мне удалось использовать мультитач-функции моего трекпада, как и предполагалось.JavaFX 2.2 - Как адаптировать прокрутку после масштабирования внутри scrollPane?

Но при масштабировании полосы прокрутки не отображаются или остаются в пути при загрузке. (Полоски отображаются (или нет) в зависимости от размера изображения.)

То же самое происходит при масштабировании.

Фотографии будут говорить сами за себя.

App with a picture loaded. NO zooming. Здесь вы можете увидеть вертикальную полосу прокрутки, потому что изображение слишком длинное.

App with the picture loaded. Zooming in. Полосы прокрутки не отображаются. За исключением вертикальной, которая является одним и тем же состоянием.

Вы можете легко увидеть при масштабировании, это то же самое.

So. Как настроить бары для масштабирования? Я хочу, чтобы «переместить» изображение с помощью трекпада. (В скроллбары работают с мультитач жестов, и это работает.)

Вот часть моего кода:

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); 
} 

Большое спасибо. Не стесняйтесь спрашивать подтверждение или другую информацию, если я забуду некоторые.

ответ

0

Я понял, что не использовал imageview.setFitWidth() для изменения размера изображения в зависимости от границ, которые у него есть. Scrollpane адаптируется. Он работает сейчас, но масштабирование намного хуже.

+0

Также используйте 'imageView.setSmooth (true);' – GOXR3PLUS

Смежные вопросы