2012-11-13 23 views
5

मैं JScrollPanel दृश्य चौड़ाई कैसे प्रतिबंधित कर सकता हूं? मैं किसी भी मामले में क्षैतिज स्क्रॉल नहीं करना चाहता हूं। मैंने अपने JViewport की आपूर्ति करने की कोशिश की लेकिन इससे बहुत मदद नहीं मिलती है।JScrollPane दृश्य चौड़ाई को प्रतिबंधित करें

private static class WidthRestrictingViewport extends JViewport { 
     private Container contents; 

     public WidthRestrictingViewport(final Container cnts) { 
      contents = cnts; 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      if (getParent() instanceof JScrollPane) { 
       JScrollPane sp = (JScrollPane) getParent(); 
       return new Dimension(sp.getWidth(), contents.getHeight()); 
      } 
      return super.getPreferredSize(); 
     } 

     @Override 
     public Dimension getMaximumSize() { 
      return getPreferredSize(); 
     } 
    } 

और कोड बनाने JScrollPane

Container fpdp = .... 

    JScrollPane sp = new JScrollPane(); 
    sp.setViewport(new WidthRestrictingViewport(fpdp)); 
    sp.setViewportView(fpdp); 

contents उदाहरण है कि मैं आपूर्ति इसकी अधिकतम चौड़ाई लेता है, फिर भी मैं इसकी चौड़ाई से अधिक नहीं JScrollPane चौड़ाई तो क्षैतिज स्क्रॉल अभ्यस्त हो बनना चाहता हूँ। मैं क्या गलत कर रहा हूं?

+1

मुझे प्रश्न समझ में नहीं आता है। 'JScrollPane' की सामग्री के साथ क्या होना चाहिए जब यह व्यापक है तो 'JScrollPane' का वास्तविक आकार। बस काट लें? उस स्थिति में आप केवल स्क्रॉल बार को अदृश्य बनाने पर विचार कर सकते हैं ('JScrollPane # getHorizontalScrollBar # setVisible (false)'); – Robin

+0

@ रॉबिन, कट ऑफ नहीं। फलक चौड़ाई स्क्रॉल करने के लिए दृश्य चौड़ाई हटाना। बस पैनल में सीमा लेआउट और सामग्री के साथ पैनल की कल्पना करें। लेकिन इस मामले में केवल सामग्री की चौड़ाई पैनल की चौड़ाई और सामग्री के साथ प्रतिबंधित है, इसकी ऊंचाई बढ़ने के साथ ही ऊंचाई बढ़ सकती है (स्क्रॉल बार जोड़ने के साथ)। –

+1

मुझे नहीं लगता कि यह 'JViewPort' की ज़िम्मेदारी है कि वह इसके दृष्टिकोण पर प्रतिबंध लगाने के लिए जिस चौड़ाई को प्राप्त कर सके, यह दृश्य के बारे में अधिक है। ['स्क्रोलबे'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/Scrollable.html) इंटरफ़ेस पर विशेष रूप से देखें ['स्क्रॉल करने योग्य # getScrollableTracksViewportWidth'] (http : //docs.oracle.com/javase/7/docs/api/javax/swing/Scrollable.html#getScrollableTracksViewportWidth%28%29) – MadProgrammer

उत्तर

2

मेरे खराब स्पष्टीकरण के लिए खेद है। मुझे ऐसा करने का एक तरीका मिला। JScrollpane needs to shrink its width के लिए धन्यवाद।

मुझे एक और समस्या का सामना करना पड़ा है जो ScrollablePanel में गलत लेआउट प्रबंधक है। वह FlowLayout था जो सभी चीजों को खराब कर देता था। मैं इसे एक बार में समझ में नहीं आया और सोचा कि समस्या Scrollable इंटरफ़ेस उपयोग के साथ है।

तो मैंने अभी ScrollablePanel लिया और इसके लेआउट प्रबंधक को BorderLayout पर सेट किया और यह सब ठीक है!