2012-12-19 41 views
5

में घटक का आकार मिलाकर मैं कैलक्यूलेटर जीयूआई के लिए बटन के दो सेट की व्यवस्था करने की कोशिश कर रहा हूं। प्रत्येक व्यक्ति उन्हें बनाने के लिए ग्रुपलाउट का उपयोग करता है। एक सेट संख्या (और "।") है, दूसरा ऑपरेशन बटन के लिए है। यह मूल रूप से काम करता है लेकिन यदि बटनों में से एक की लंबाई डबल लम्बाई है (उदाहरण के लिए मेरे ऑपरेशंस सेट पर बराबर बटन) तो यह अन्य बटन को लाइन से बाहर फेंकता है। मैं एक उदाहरण के रूप में ऑपरेशन सेट का उपयोग करूंगा। बटन के दो कॉलम और चार पंक्तियां हैं। अंतिम पंक्ति में केवल एक बटन होता है - बराबर होता है। मैं दोनों कॉलमों में इस डबल लम्बाई को खींचना चाहता हूं। फिलहाल जब मैं दूसरे कॉलम को इसके ऊपर बैठना चाहता हूं तो इसके अंत में यह दूसरा कॉलम धक्का देता है।जावा - ग्रुपलायआउट

लेआउट के लिए कोड यहां दिया गया है - ऑपरेटल के लिए लेआउट का नाम पहली पंक्ति पर बाएं और दाएं ब्रैकेट का नाम है, और दूसरा, * और/तीसरे पर और अंतिम पंक्ति पर बराबर है । प्रत्येक बटन में न्यूनतम आकार सेट होता है (वे सभी समान होते हैं सिवाय इसके बराबर बराबर होता है)।

operLayout.setAutoCreateGaps(true); 
operLayout.setAutoCreateContainerGaps(true); 
operLayout.setVerticalGroup(operLayout 
     .createSequentialGroup() 
     .addGroup(
operLayout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(leftBracket) 
          .addComponent(rightBracket)) 
      .addGroup(operLayout.createParallelGroup().addComponent(add).addComponent(subtract)) 
      .addGroup(operLayout.createParallelGroup().addComponent(multiply).addComponent(divide)) 
      .addGroup(operLayout.createParallelGroup().addComponent(equals))); 
    operLayout.setHorizontalGroup(operLayout 
      .createSequentialGroup() 
      .addGroup(
        operLayout.createParallelGroup().addComponent(leftBracket).addComponent(add) 
          .addComponent(multiply).addComponent(equals)) 
      .addGroup(
        operLayout.createParallelGroup().addComponent(rightBracket).addComponent(subtract) 
          .addComponent(divide))); 

मुझे समझ में आता है कि यह क्यों हो रहा है लेकिन मुझे यकीन नहीं है कि इसे कैसे हल किया जाए। क्या कोई आसान तरीका है? या क्या मैं इसे जिस तरह से कर रहा हूं उसे बदलना चाहिए? धन्यवाद

+0

मैं इस कार्य के लिए आपको 'ग्रुपलाउट' की अपनी पसंद के लिए सराहना करता हूं। मेरा मानना ​​है कि यह लेआउट मानक रूपों को निर्धारित करने के लिए सबसे शक्तिशाली है। इसे आसानी से अनदेखा किया जाता है क्योंकि इसका उपयोग जटिल है। यह सीखने के बाद कि यह कैसे काम करता है, मैं इसे लगभग विशेष रूप से उपयोग करता हूं। –

+0

आपके कोड को दोबारा सुधार सकते हैं? वर्तमान; y यह बल्कि अपठनीय है। – ArtB

+0

हां, कृपया करें, हालांकि किसी ने आपको इसे हराया होगा। धन्यवाद @ एरिक रॉबर्टसन, मुझे पता है कि आपका क्या मतलब है, यह जटिल लगता है लेकिन एक बार जब आप इसे समझते हैं, तो यह वास्तव में उपयोगी है! – PatrickJBC

उत्तर

3

equals घटक अपने समांतर क्षैतिज समूह में रखें।

सबसे पहले, सुनिश्चित करें कि आप GroupLayout का उपयोग करते समय लगातार इंडेंटेशन का उपयोग करें। मुझे क्या चल रहा है इसका ट्रैक रखने में यह बिल्कुल महत्वपूर्ण पाया गया है।

आपके द्वारा रिपोर्ट किए गए व्यवहार को देखने का कारण यह है कि बराबर चिह्न बटन के पहले कॉलम के समान क्षैतिज समांतर समूह का हिस्सा है। तो जब आप इसे डबल चौड़ा बनाते हैं, तो यह दाईं ओर बटन के दूसरे कॉलम को धक्का देता है। यह वही है जो आप इसे करने के लिए कह रहे हैं क्योंकि आप इसे पहले समांतर समूह (कॉलम) में रहने के लिए कह रहे हैं।

अपने इच्छित व्यवहार को प्राप्त करने के लिए, आपको अन्य बटनों के समानांतर में उस बटन को अलग से लेआउट करना होगा। आप इसे अपने समांतर समूह में डालकर ऐसा करते हैं। सबसे अच्छा व्यवहार पाने के लिए आप शायद इस समूह पर एक संरेखण भी रखना चाहते हैं। मुझे लगता है कि GroupLayout.Alignment.CENTER वह है जो आप चाहते हैं।

यह भी ध्यान दें कि यदि आपको इसमें केवल एक घटक होने वाला है तो आपको एक नया समूह बनाने की आवश्यकता नहीं है। इसके बजाए बस उस घटक को जोड़ें।

operLayout.setVerticalGroup(operLayout.createSequentialGroup() 
    .addGroup(operLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) 
     .addComponent(leftBracket) 
     .addComponent(rightBracket)) 
    .addGroup(operLayout.createParallelGroup() 
     .addComponent(add) 
     .addComponent(subtract)) 
    .addGroup(operLayout.createParallelGroup() 
     .addComponent(multiply) 
     .addComponent(divide)) 
    .addComponent(equals)); 
operLayout.setHorizontalGroup(operLayout.createParallelGroup() 
    .addGroup(operLayout.createSequentialGroup() 
     .addGroup(operLayout.createParallelGroup() 
      .addComponent(leftBracket) 
      .addComponent(add) 
      .addComponent(multiply)) 
     .addGroup(operLayout.createParallelGroup() 
      .addComponent(rightBracket) 
      .addComponent(subtract) 
      .addComponent(divide))) 
    .addComponent(equals)); 
+0

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

+0

ठीक है क्षमा करें, आपको एहसास हुआ कि आपने शुरू करने के लिए क्षैतिज कहा है लेकिन ऐसा करने से समस्या हल नहीं होती है। – PatrickJBC

+0

मुझे नहीं पता कि यह आपके लिए समस्या का समाधान क्यों नहीं कर रहा है।सुनिश्चित करें कि आपके इंडेंटेशन आपके कोष्ठक के साथ लाइन करें ताकि आप उचित समूह में घटक जोड़ रहे हों। इसे अनुक्रमिक समूह के समानांतर में जोड़ा जाना चाहिए जिसमें क्षैतिज समूह के भीतर दो कॉलम शामिल हैं। यह काम करता है, इसलिए मुझे यकीन नहीं है कि आप अलग-अलग क्या कर रहे हैं। लेकिन अगर मैं मूल कोड व्यवस्थित करने के तरीके के आधार पर गलत जगह पर हूं तो मुझे आश्चर्य नहीं होगा। –

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

  • कोई संबंधित समस्या नहीं^_^