2012-03-04 13 views
5

मैं जावा के लिए बिल्कुल नया हूं और मैं कुछ लेबल, बटन और टेक्स्टफील्ड के साथ एक जीयूआई एप्लीकेशन बनाने की कोशिश कर रहा हूं। कार्यक्रम बहुत आसान है और मैं सिर्फ एक डिफ़ॉल्ट लेआउट का उपयोग करना चाहता था, जो फ़्लोलाउट है। मैं सब कुछ ठीक करने और आकार देने में कामयाब रहा, लेकिन एकमात्र चीज काम नहीं कर रही है संरेखण है। मैं कुछ संरेखण के साथ बटन और टेक्स्टफील्ड रखना चाहता हूं, लेकिन जब भी मैं एक संरेखण सेट करता हूं, तो यह वस्तु को ऑब्जेक्ट के बजाए ऑब्जेक्ट के अंदर ले जाता है। उदाहरण के लिए, मैंने लिखा:जावा स्विंग फ़्लोलाउआउट संरेखण

button.setHorizontalAlignment(JButton.RIGHT); 

लेकिन ऐसा लगता है जैसे यह बटन के बजाय बटन के अंदर टेक्स्ट को संरेखित करता है। क्या इसके अंदर पाठ के बजाए बटन को स्वयं संरेखित करने का कोई तरीका है?

मुझे पता है कि संरेखण सामग्री किसी अन्य प्रकार के लेआउट (जैसे BoxLayout) के साथ आसान हो सकती है, लेकिन मैं सिर्फ इस के लिए फ़्लोलाउट का उपयोग करना चाहता हूं, जब तक कि फ़्लोलाउट (जिसे मैं नहीं करता ' ऐसा नहीं लगता)।

अग्रिम धन्यवाद।

+2

+1 अच्छा सवाल है, स्विंग के लिए [SSCCE] के साथ बेहतर पोस्ट सवाल है (http://sscce.org/) – mKorbel

उत्तर

13

निर्माता FlowLayout(int align) देखें।

एक नया FlowLayout निर्दिष्ट संरेखण और एक डिफ़ॉल्ट 5 इकाई क्षैतिज और ऊर्ध्वाधर अंतराल के साथ निर्माण करती है। संरेखण तर्क का मान FlowLayout.LEFT, FlowLayout.RIGHT, FlowLayout.CENTER, FlowLayout.LEADING, या FlowLayout.TRAILING में से एक होना चाहिए।

ऐसा लगता है के रूप में this answer में देखा (कॉम्बो और शीर्ष पर बॉक्स की जांच) यदि आप एक FlowLayout.RIGHT के बाद कर रहे हैं।

+0

हाँ, यह काम किया। बेहतर संरेखण प्राप्त करने के लिए मुझे स्पष्ट रूप से अन्य प्रकार के लेआउट का उपयोग करने की आवश्यकता है, लेकिन यह बहुत अच्छा काम करता है। धन्यवाद। – Dennis

+1

फिर मैं ऊपर की तरह एक घोंसला लेआउट के लिए जाना होगा। हालांकि प्रवाह लेआउट के अलावा उसमें एकमात्र संरेखण 'ग्रिडबैगआउट' में छवि का केंद्र है। उत्तरार्द्ध कन्स्ट्रक्टर में हासिल नहीं किया गया है, लेकिन छवि जोड़ने के दौरान एक लेआउट बाधा (या बल्कि, एक का उपयोग करने के लिए उपेक्षा) का उपयोग करके। –

+0

@AndrewThompson: जब मैं यह 'जेपीनल प्लैफ कॉम्पोनेंट्स = नया जेपीनल (नया फ़्लोलाउट (फ़्लोलाउट.आरजीएचटी, 3,3)) लिखता हूं;', यह मुझे एक त्रुटि देता है जो कहता है कि प्रतीक नहीं मिल सकता है, वैरिएबल सही या जो भी मैं उपयोग करता हूं। क्या मेरे जेडीके में कुछ गड़बड़ है? हालांकि मैं सामान्य फ़्लोलाउट कन्स्ट्रक्टर का उपयोग कर सकता हूं। उम्मीद है कि आप मुझे सलाह दे सकते हैं कि मेरे अंत में क्या गलत है? या क्या मैं इसके लिए एक नया धागा शुरू करूंगा? –

2

AbstractButton की setHorizontalAlignmentआइकन और पाठ नहीं बटन की स्थिति की क्षैतिज संरेखण सेट करता है। सार बटन बटन डिफ़ॉल्ट है SwingConstants.CENTER।

आप जबकि यह पैनल में जोड़ने से या इस तरह frame..something button..set स्थिति संरेखित करने के लिए ....

p.add(button, BorderLayout.SOUTH);//using `BorderLayout` 

फ्लो लेआउट आम तौर पर एक में बटन की व्यवस्था करने के लिए उपयोग किया जाता चाहते हैं पैनल। यह बटन को तब तक बाएं व्यवस्थित करेगा जब तक कि एक ही पंक्ति पर कोई और बटन फिट न हो जाए।

+0

मैं इस काम नहीं लगता है .. मैं यह कोशिश की, लेकिन कुछ भी नहीं बदलता है। यह कहता है कि दूसरा पैरामीटर स्थिति के लिए है, लेकिन यह किसी कारण से कुछ भी नहीं बदलता है। – Dennis

2

मुझे नहीं लगता कि आप अकेले फ़्लोलाउट के साथ ऐसा कर सकते हैं।

मेरे सुझाव होगा:

  • MigLayout का उपयोग करने जा जो एक अधिक शक्तिशाली लेआउट तंत्र है पर विचार करें। MigLayout मूल रूप से आपको एक लचीली ग्रिड के भीतर घटकों की स्थिति देता है, और आप प्रत्येक ग्रिड सेल के भीतर एक घटक के विशिष्ट संरेखण को सेट कर सकते हैं।
  • जब आप सबकंपोनेंट्स के संरेखण चाहते हैं, तो अक्सर उन्हें घोंसले जेपीनल के अंदर रखने का अर्थ भी होता है। फिर आप इस जेपीनल (सीमावर्ती शायद?) के लिए एक अलग लेआउट का उपयोग कर सकते हैं जो आपको इच्छित सटीक संरेखण प्राप्त करने में सक्षम बनाता है।
संबंधित मुद्दे