2016-09-14 132 views
0

我正在使用JavaFX和CSS製作的應用程序。我已經達到了必須在scrollPane(它在GridPane中)內顯示圖片的地步。我需要放大這張照片。按照預期,我成功地使用了我的觸控板的多點觸控功能。JavaFX 2.2 - 如何適應在scrollPane內縮放後的滾動?

但是,當放大時,滾動條不顯示,或它保持它在加載的方式。 (根據圖片大小顯示(或不顯示)條)

縮小時會發生同樣的情況。

圖片將爲自己討論。

App with a picture loaded. NO zooming. 您可以在這裏注意到,因爲圖片太長,會顯示垂直滾動條。

App with the picture loaded. Zooming in.滾動條未顯示。除了垂直狀態相同外,

你可以很容易地看到縮小時,這是同樣的事情。

所以。如何設置條形以適應縮放?我希望能夠使用觸控板「移動」圖片。 (滾動條與多點觸摸手勢運行和它的作品。)

這裏是我的代碼的一部分:

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()來調整Imageview的大小,這取決於它有一個瞬間的邊界。該scrollpane正在適應自己。它現在可以工作,但縮放比例最差。

+0

也使用'imageView.setSmooth(true);' – GOXR3PLUS