2011-09-22 10 views
6

मैं स्विंग जीयूआई पर काम कर रहा हूं और JSeperator जोड़ने के बाद कुछ असामान्य और अवांछित अंतराल प्राप्त कर रहा हूं, कोई विचार उन्हें कैसे निकालना है? या इस अच्छी तरह से हासिल करने के लिए कोई अन्य विकल्प!जेएसपीरेटर का उपयोग करते समय असामान्य अंतराल - जावा

दृश्य विवरण

enter image description here

अंतराल से पहले JLabel "स्पीड" और JSlider के बाद स्पष्ट कर रहे हैं।

संबंधित कोड

control.setLayout(new BoxLayout(control, BoxLayout.X_AXIS)); 

...another code omitted... 

control.add(orientation); //JLabel 
control.add(norm); //JRadioButton 
control.add(back); //JRadioButton 
control.add(new JSeparator(SwingConstants.VERTICAL)); 
control.add(speedLabel); //JLabel 
control.add(speed); //JSlider 
control.add(new JSeparator(SwingConstants.VERTICAL)); 
control.add(turnOutLabel); //JLabel 
control.add(right); //JRadioButton 
control.add(straight); //JRadioButton 
control.add(left); //JRadioButton 

क्या मैं चाहता हूँ सब कुछ केंद्रित किया है करने के लिए और JSeperator द्वारा अलग है,

दृश्य विवरण

enter image description here

धन्यवाद।

+0

क्या आपने क्षैतिज गोंद की कोशिश की है या अपने 'जेएसपरेटर' उदाहरणों के लिए खाली सीमा लागू की है? – mrkhrts

+0

@mrkhrts गोंद मदद नहीं करता है, यह असंबद्ध अधिकतम के साथ एक और घटक है ;-) – kleopatra

उत्तर

7

बस (आप उन्हें एक विधि में डाल अगर तुम चाहते हो सकता है) निम्नलिखित लाइनों के साथ new JSeparator(...) को प्रतिस्थापित नहीं करता:

JSeparator separator = new JSeparator(JSeparator.VERTICAL); 
Dimension size = new Dimension(
    separator.getPreferredSize().width, 
    separator.getMaximumSize().height); 
separator.setMaximumSize(size); 

रूप @kleopatra बताया गया है, JSeparator असीम अधिकतम आकार है (दोनों दिशाओं में), इसलिए यहां की चाल अधिकतम चौड़ाई को पसंदीदा चौड़ाई तक सीमित करने के लिए है, लेकिन फिर भी अधिकतम ऊंचाई अपरिवर्तित रखें (क्योंकि पसंदीदा ऊंचाई 0 है)।

+0

nonononono ... कभी भी सेट नहीं करें - यह नियम हमेशा के लिए रहता है ... हमेशा के लिए और हर कोई (यहां तक ​​कि आप और मैं ) – kleopatra

+0

यह वास्तव में काम करता था, लेकिन अब मुझे ऐसा नहीं करना चाहिए जैसा कि आपने बिग ओ के साथ ओ (नहीं) नहीं कहा है;), मैं हॉवर्ड की सिफारिश का प्रयास करूंगा, मुझे लगता है कि यह काम करना चाहिए! – doNotCheckMyBlog

+0

@ क्लोपेट्रा अरे! मैंने सोचा था कि आप और मैं प्रतिरक्षा थे और ऐसा कर सकता है ;-) गंभीरता से हालांकि, मुझे उपरोक्त स्निपेट में यह महत्वपूर्ण नहीं लगता है (जब तक कोई हार्ड-कोडित पिक्सेल आकार प्रकट नहीं होता है, यह अभी भी Acce दिखता है मुझे ptable)। – jfpoilpret

1

नया फ़्लोलाउट (FlowLayout.LEFT) में BoxLayout बदलें। यह काम करना चाहिए। दुर्भाग्यवश मेरे पास वास्तविक स्पष्टीकरण नहीं है कि BoxLayout आपके लिए क्यों काम नहीं करता है।

+0

यदि मैं फ्लोलाइटआउट का उपयोग करता हूं, तो स्विंग डोज़ेंट शो जेएसपीरेटर बिल्कुल :(, बहुत रोचक। – doNotCheckMyBlog

0

आप FlowLayout के साथ अपने control को दूसरे पैनल में डाल सकते हैं।

अद्यतन: दुर्भाग्य control की स्थापना, के माध्यम से

control.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0)); 

सीधे flowlayout लिए काम नहीं करता है के बाद से विभाजक की पसंदीदा ऊंचाई शून्य है और विभाजक गायब हो जाएगा।

+0

यदि मैं फ़्लोलाउट का उपयोग करता हूं, तो स्विंग डोज़ेंट शो जेएसपीरेटर :(, बहुत रोचक। – doNotCheckMyBlog

+0

@SkeetOverFlow आप सही हैं। इस प्रकार आप इसे हमेशा किसी अन्य कंटेनर में डाल सकते हैं। – Howard

4

कारण BoxLayout उन अंतराल जोड़ रहा है कि

  • अपने फ्रेम (पैनल) की चौड़ाई बच्चों
  • JSeparator और JSlider की कुल वरी आकार से बड़ा है एक असीम है (व्यावहारिक रूप से, यह है Short.Max) अधिकतम चौड़ाई, जबकि अन्य सभी एक सामग्री निर्भर अधिकतम
  • BoxLayout अधिकतम आकार का सम्मान करता है, इसलिए सभी अतिरिक्त उन तीन

reas के बीच वितरित किया जाता है पर FlowLayout सब पर विभाजक, प्रदर्शित नहीं करता है

  • JSeparator 0
  • FlowLayout के वरी ऊंचाई है हर बच्चे को अपनी वरी आकार देता है

आसान तरीका बाहर Howare का पहला सुझाव है: जोड़ने प्रवाह के साथ एक पैनल के लिए पूर्ण नियंत्रण। अधिक मजबूत समाधान एक और शक्तिशाली लेआउटमैनेजर पर स्विच करना है :-)

(फिर से संपादित, BorderLayout हटाएं।दक्षिण/उत्तर ;-)

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