2013-07-10 3 views
38

फिट करने के लिए जावाएफएक्स स्क्रॉलपेन सामग्री का आकार कैसे बदलें मेरे पास BorderPane है ScrollPane केंद्र तत्व के रूप में। यह स्क्रीन भरने के लिए स्वचालित रूप से आकार बदलता है। ScrollPane के अंदर HBox है जिसमें कोई सामग्री नहीं है लेकिन ड्रैग-एंड-ड्रॉप लक्ष्य है। इसलिए मैं इसे अपने माता-पिता ScrollPane भरना चाहता हूं।वर्तमान आकार

ऐसा करने का पसंदीदा तरीका क्या है?

मैंने अब तक कोशिश की है ScrollPane.resize(...)HBox का आकार बदलने के लिए विधि को ओवरराइड कर रहा है लेकिन यह अपेक्षाकृत जटिल और अपरंपरागत लगता है।

संपादित करें: यह करने के लिए कुछ उपयोगी कोड जोड़ने के लिए, यह कैसे मैं इस समस्या वैकल्पिक हल कर सकते हैं, लेकिन मेरा मानना ​​है कि वहाँ यह करने के लिए कुछ बेहतर तरीका हो गया है:

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

कोड आंशिक रूप से यहां से ली गई है: How to access the Scrollbars of a ScrollPane

+0

ठीक है, मैं सिर्फ एक hgrow और vgrow को कभी कभी रखा है और उसे अब काम करता है – user7867610

उत्तर

62

resize() विधि अधिभावी बिना

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

की कोशिश करो।

+1

जैसा मैंने सोचा था, वहां स्पष्ट तरीका होना चाहिए जो मुझे अभी नहीं मिला। आपके उत्तर के लिए बहूत बहूत धन्यवाद! – Lennert

+0

xf में setFitToHeight और setFitToWidth के लिए एक्सेस विधि क्या है? – Andrew121007

+6

@ एंड्रयू 121007 यह है <<स्क्रॉलपेन एफएक्स: आईडी = "स्क्रोलपैन" फिट टॉइटहाइट = "सच" फिट टॉइडथ = "सच"> ' –

17

XML या CSS के माध्यम से fitToHeight या fitToWidth विशेषता स्थापना:

FXML:

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

सीएसएस:

+0

मुझे पूरी चीज स्वचालित करने के लिए .my-scroll-pane जैसे कुछ स्क्रॉलपैन का उपयोग करना पसंद है, नहीं तब FXML परिवर्तनों की आवश्यकता है .. शायद एक डिफ़ॉल्ट होना चाहिए। – User

+0

@ मॅनियस सच है, लेकिन आपको सावधान रहना चाहिए कि आप इसे विशिष्ट बनाते हैं, अन्यथा आपके सभी स्क्रॉल पैन समान व्यवहार करते हैं और शायद आप इसे नहीं चाहते हैं। – NDY

+0

आईडी यह जोड़ना पसंद करता है कि यह विकल्प दृश्य बिल्डर में उपलब्ध है। 'लेआउट' के तहत किसी भी स्क्रॉल फलक में -> 'विशिष्ट' (शीर्ष से दूसरा) -> चौड़ाई/ऊंचाई तक फिट करें। उम्मीद है कि यह किसी की मदद करता है मुझे ढूंढने में थोड़ी देर लग गई। –

संबंधित मुद्दे