2010-04-26 11 views
9

मेरे पास JScrollpane है जिसमें JPanel अंदर है (और पैनल में कुछ JLabel एस हैं)।JScrollpane को इसकी चौड़ाई को कम करने की आवश्यकता है

मैं वास्तव में व्यूपोर्ट का आकार न केवल अपने आकार (संभवतः आंतरिक घटकों के पसंदीदा आकार के नीचे) को बदलने के लिए स्क्रॉल फलक का आकार बदलना चाहता हूं।

लक्ष्य आंतरिक पैनल के लिए शानदार ढंग से गायब होने के लिए है (विशिष्ट संकीर्ण प्राथमिकताओं का उपयोग करके और मेरे माइगलेआउट में जैसा) जब उपयोगकर्ता स्क्रॉलपैन को बहुत छोटा करता है।

+0

सवाल मेरे लिए काफी स्पष्ट नहीं है, लेकिन आप शायद jScrollPane के आकार में परिवर्तन की निगरानी और प्रतिक्रिया जब यह कुछ बाध्य की तुलना में कम (इसे सुचारू रूप से छिपाने हो जाता है हो सकता है)। –

+0

ऐसा लगता है कि कुछ मूर्खतापूर्ण रिलायआउट सामान करना जब 'JViewport' परिवर्तनों का आकार इसे करने का एकमात्र तरीका है। (स्पष्टीकरण के लिए, मेरे पास मूल रूप से एक स्क्रॉलपैन के व्यूपोर्ट के अंदर एक टेबल है। मैं चाहता हूं कि स्क्रॉलपैन यह निर्धारित करे कि तालिका की कौन सी पंक्तियां दिखायी गई हैं, लेकिन मैं नहीं चाहता कि यह कॉलम दिखाए जाने वाले प्रभावों को प्रभावित करे। मैं क्या करना चाहता हूं विभिन्न स्तंभों के लिए एक संकीर्ण प्राथमिकता असाइन करना है ताकि टेक्स्टबॉक्स के क्षैतिज आकार को कम करने से विशिष्ट कॉलम को छोटा कर दिया जा सके।) – Mike

उत्तर

14

शायद सबसे अच्छा तरीका है कि निहित घटक हमेशा व्यूपोर्ट के समान चौड़ाई हो। ऐसा करने के लिए पहला निहित घटक (वह बच्चा जो JViewPort है, JScrollPane कन्स्ट्रक्टर में पास किया गया है या viewportView के रूप में सेट किया गया है) को javax.swing.Scrollable लागू करने की आवश्यकता है। मुख्य विधि getScrollableTracksViewportWidth है, जो true वापस करनी चाहिए।

यहाँ एक त्वरित और गंदी स्क्रॉल JPanel है:

public class ScrollablePanel extends JPanel implements Scrollable { 
    public Dimension getPreferredScrollableViewportSize() { 
     return getPreferredSize(); 
    } 

    public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) { 
     return 10; 
    } 

    public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) { 
     return ((orientation == SwingConstants.VERTICAL) ? visibleRect.height : visibleRect.width) - 10; 
    } 

    public boolean getScrollableTracksViewportWidth() { 
     return true; 
    } 

    public boolean getScrollableTracksViewportHeight() { 
     return false; 
    } 
} 
+0

बहुत बढ़िया, धन्यवाद! मुझे स्क्रॉल करने योग्य इंटरफ़ेस से अवगत नहीं था। – Mike

+0

एक और बात। मुझे केवल 'समाधान सीमा' के साथ काम करने वाला यह समाधान मिला है। डिफ़ॉल्ट 'FlowLayout' बहुत व्यापक विचारों के लिए सही ढंग से काम नहीं करता है। –

+0

प्रवाह लेआउट का उपयोग न करें। यह केवल डेमो और बटन बार के लिए उपयुक्त है। प्रवाह लेआउट की चौड़ाई को ट्रैक करने का अब तरीका है। – shemnon

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