2013-07-10 18 views
38

BorderPane, ScrollPane merkez öğesiyle birlikte. Ekranı doldurmak için otomatik olarak yeniden boyutlandırılır. ScrollPane'un içinde, içeriği olmayan ancak sürükle ve bırak hedefi olan HBox bulunur. Bu yüzden onun ScrollPane ebeveyini doldurmasını istiyorum.JavaFX ScrollPane içeriğini geçerli boyutta sığdırmak için nasıl yeniden boyutlandırılır

Bunu yapmanın tercih edilen yolu nedir?

Şimdiye kadar denediğim, HBox'u yeniden boyutlandırmak için ScrollPane.resize(...) yöntemini geçersiz kılıyor ancak oldukça karmaşık ve alışılmamış görünüyor.

düzenleme: Bu ben sorununu geçici nasıl olduğunu Buna bazı yararlı kodu eklemek için ama bunun için bazı iyi bir yolu olmalı inanıyoruz: kısmen buradan alınan

@Override 
public void resize(double width, double height) { 
    super.resize(width, height); 

    double scrollBarHeight = 2; 
    double scrollBarWidth = 2; 

    for (final Node node : lookupAll(".scroll-bar")) { 
     if (node instanceof ScrollBar) { 
      ScrollBar sb = (ScrollBar) node; 
      if (sb.getOrientation() == Orientation.HORIZONTAL) { 
       System.out.println("horizontal scrollbar visible = " + sb.isVisible()); 
       System.out.println("width = " + sb.getWidth()); 
       System.out.println("height = " + sb.getHeight()); 
       if(sb.isVisible()){ 
        scrollBarHeight = sb.getHeight(); 
       } 
      } 
      if (sb.getOrientation() == Orientation.VERTICAL) { 
       System.out.println("vertical scrollbar visible = " + sb.isVisible()); 
       System.out.println("width = " + sb.getWidth()); 
       System.out.println("height = " + sb.getHeight()); 
       if(sb.isVisible()){ 
        scrollBarWidth = sb.getWidth(); 
       } 
      } 
     } 
    } 

    hBox.setPrefSize(width-scrollBarWidth, height-scrollBarHeight); 
} 

Kod: How to access the Scrollbars of a ScrollPane

+0

, sadece bazen hgrow ve vgrow koymak ve onu şimdi çalışıyor – user7867610

cevap

62

resize() yöntemi geçersiz olmadan

ScrollPane scrollPane = new ScrollPane(); 
scrollPane.setFitToHeight(true); 
scrollPane.setFitToWidth(true); 

deneyin.

+1

Sadece düşündüğüm gibi, bulamadığım bariz bir yol olmalıydı. Cevaplarınız için teşekkürler! – Lennert

+0

SetFitToHeight ve xml'de setFitToWidth için erişim yöntemi nedir? – Andrew121007

+6

@ Andrew121007 bu

17

XML veya CSS aracılığıyla fitToHeight veya fitToWidth niteliğini ayarlanması:

FXML:

<ScrollPane fx:id="myScrollPane" fitToHeight="true" fitToWidth="true" /> 

CSS: Sorun değil

+0

Tüm şeyi otomatik yapmak için ScrollPane gibi bir şey yerine .my-scroll-pane kullanmayı seviyorum Gerekli FXML değişiklikleri .. muhtemelen bir varsayılan olmalıdır. – User

+0

@Manius, bu doğru, ancak bunu belirli hale getirdiğinize dikkat etmelisiniz, aksi takdirde tüm kaydırma bölmeleriniz aynı şekilde davranır ve muhtemelen bunu istemezsiniz. – NDY

+0

Bu seçeneğin Sahne Oluşturucu'da kullanılabileceğini eklemek istiyorum. Herhangi bir Kaydırma Bölmesinde 'düzen' -> 'Özel' (üstte ikinci) -> Genişliğe/Yüksekliğe Sığdır altında. Umarım bulamam için bir süre bana yardımcı olur. –