2011-03-17 17 views
5

के केंद्र में जेएलएबल को संरेखित करें मेरे पास मेरे एप्लिकेशन के शीर्ष पर एक बार है जिसमें कई बटन जेएलएबल के दोनों तरफ हैं। बटन की दृश्यता वर्तमान कार्य के आधार पर उपयोगकर्ता द्वारा किए जा रहे वर्तमान कार्य पर निर्भर होती है और वर्तमान स्थिति के आधार पर बटन का टेक्स्ट भी बदल सकता है।जावा जेनबेल

मैं क्या करना चाहता हूं कि जेपीनेल के बाईं ओर कई बटन चिपके रहें, जेएलएबल का केंद्र जेपीनल के बहुत से केंद्र में होगा और शेष बटन जेपीनल के दाईं ओर होंगे ।

अभी तक मैंने बाईं ओर चिपकने वाले बटन और विभिन्न विधियों और लेआउट प्रबंधकों का उपयोग करके अधिकार प्राप्त करने में कामयाब रहे हैं, लेकिन मुझे जेएलएबल का केंद्र जेपीनेल के मृत केंद्र में नहीं मिल सकता है। सबसे अच्छा मैंने प्राप्त करने में कामयाब रहा है वह केंद्र के पास पर्याप्त लेबल है, लेकिन फिर बटनों को दृश्यमान करने के लिए सेट किया गया है या उनके टेक्स्ट में बदलाव होने पर यह चारों ओर घूमता है।

क्या जेएलएबल को मृत केंद्र बने रहने के लिए मजबूर करना संभव है?

नोट: बटन जेएलएबल के किनारे को पूरा करने के लिए कभी भी बड़े नहीं होंगे, इसलिए यह कोई समस्या नहीं है।

उत्तर

3

है मैं इसे देख आप लेबल की जरूरत है अपने को प्राथमिकता पर प्रदर्शित करने के लिए आकार और फिर आपको विंडो में उपलब्ध शेष स्थान को समान रूप से भरने के लिए बाएं और दाएं पैनल की आवश्यकता है।

आप Relative Layout कक्षा का उपयोग कर सकते हैं।

import java.awt.*; 
import javax.swing.*; 

public class RelativeSSCCE extends JPanel 
{ 
    public RelativeSSCCE() 
    { 
     JPanel left = new JPanel(new FlowLayout(FlowLayout.LEFT)); 
     left.add(new JButton("L1")); 
     left.add(new JButton("L2")); 
     left.add(new JButton("L3")); 

     JLabel center = new JLabel("Centered"); 

     JPanel right = new JPanel(new FlowLayout(FlowLayout.RIGHT)); 
     right.add(new JButton("Right1")); 
     right.add(new JButton("Right2")); 
     right.add(new JButton("Right3")); 

     // choose your layout manager here 

     setLayout(new RelativeLayout()); 
     Float ratio = new Float(1); 
     add(left, ratio); 
     add(center); 
     add(right, ratio); 
    } 

    private static void createAndShowUI() 
    { 
     JFrame frame = new JFrame("Basic RelativeSSCCE"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new RelativeSSCCE()); 
     frame.setSize(600, 100); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowUI(); 
      } 
     }); 
    } 
} 
+0

मैं अभी तक रिश्तेदार लेआउट का प्रयास नहीं कर रहा हूं, लेकिन ग्रिडबैगलाउट में सीमा सीमा के समान समस्या है। बाएं और दाएं पैनल समान चौड़ाई के नहीं हैं और इसलिए केंद्र पैनल वास्तव में केंद्रित नहीं है। – Bassetts

+0

रिलेवेटलाइट ने एक इलाज किया, एक डिफ़ॉल्ट लेआउट मैनेजर का उपयोग करना पसंद करता था, लेकिन ऐसा लगता है कि वे एक छोटे से काम के रूप में क्या संभाल नहीं सकते हैं। धन्यवाद। – Bassetts

3

BorderLayout का उपयोग करें। JLabel को BorderLayout.CENTER बाधा के साथ जोड़ें और BorderLayout.EAST और BorderLayout.WEST बाधाओं के साथ जेपीनेल की एक जोड़ी जोड़ें। उपयुक्त जेपीनल में अपने अतिरिक्त बटन जोड़ें।

टेक्स्ट को केंद्रित करने के लिए, आपको लेबल के क्षैतिज एलाइनमेंट को JLabel.CENTER पर सेट करने की भी आवश्यकता है।

+0

मैंने कोशिश की है लेकिन पूर्व और पश्चिम पैनल आकार में बराबर नहीं हैं, इसलिए पैनलों में बटनों की संख्या और बटन पर पाठ बदल सकता है, केंद्र वास्तव में मुख्य पैनल में केंद्रित नहीं है। – Bassetts

7

तुम भी एक BoxLayout इस्तेमाल कर सकते हैं, X_AXIS लेआउट के साथ, और कंटेनर के लिए

संपादित जोड़ें: यहाँ एक उदाहरण

panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); 
panel.add(Box.createHorizontalGlue()); 
panel.add(innerPanel); 
panel.add(Box.createHorizontalGlue()); 
+0

यकीन नहीं है कि यह कैसे काम करता है! + यह आसान है। –

+0

बस पता चला कि यह केवल तभी काम करता है जब 'पैनल' का न्यूनतम और अधिकतम आकार अपने पसंदीदा आकार में सेट हो। –

0

मैं `necroposting हो सकता है लेकिन setAlignmentX (java.awt.Component.CENTER_ALIGNMENT) और setAlignmentY (java.awt.Component.CENTER_ALIGNMENT) मदद मिल सकती है ...

2
setAlignmentX(java.awt.Component.CENTER_ALIGNMENT) 

और

setAlignmentY(java.awt.Component.CENTER_ALIGNMENT) 

मदद कर सकता है यदि तत्वों के साथ उपयोग किया जाना चाहिए, उदाहरण के लिए जेपीनेल