2011-08-06 6 views
10

के साथ कई घटकों वाली पंक्ति पर एक घटक को कैसे केन्द्रित किया जाए, मैंने मिगलायआउट का उपयोग लगभग एक महीने पहले किया था और सबकुछ सरल है और बहुत अच्छा काम करता है। मेरे पास अभी भी एक मुद्दा है कि मैं ठीक करने में सक्षम नहीं हूं।MiGLayout

चलो कहते हैं कि मैं एक पंक्ति सबसे-दाएं तरफ और एक केंद्रित शीर्षक पर दो बटन है कि है, शीर्षक वास्तव में केंद्रित नहीं होता है जब मैं इसे इस तरह से करना चाहते हैं:

("इस" एक JPanel है)

this.add(labelTitle, "split, span, center"); 
this.add(closeButton, "east"); 
this.add(mainMenuButton, "east"); 

क्या होता है कि "labelTitle" बटन के बाद उपलब्ध शेष अंतरिक्ष में केंद्रित है रखा जाता है, लेकिन मैं वास्तव में यह पूरी JPanel के सापेक्ष केंद्रित किया जाना चाहते हैं, न सिर्फ शेष अंतरिक्ष ।

वांछित प्रभाव प्राप्त करने के लिए मैं किस पैरामीटर का उपयोग कर सकता हूं? मुझे पता है कि मैं पूर्ण स्थिति का उपयोग कर सकता हूं, लेकिन मैं ऐसा नहीं करना चाहता क्योंकि यह मेरे मामले में पहली जगह मिगलाउट का उपयोग करने के उद्देश्य को हरा देता है।

उत्तर

6

क्या ऐसा कुछ ऐसा हो सकता है जिसे आप ढूंढ रहे हैं?

चीयर्स!

public static void main(String[] args) 
{ 
    JFrame frame = new JFrame(); 

    JPanel panel = new JPanel(new MigLayout("debug")); 
    panel.add(new JLabel("Label Title"), "x2 min(b1.x - unrel, (container.w+pref)/2)"); 
    panel.add(new JButton("Close Button"), "id b1, pushx, alignx right"); 
    panel.add(new JButton("Main Menu Button"), "alignx right"); 

    frame.add(panel); 
    frame.setSize(800, 200); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
} 
+0

यह बेकार ढंग से काम करता है। मैं MiGLayout को सभी मानकों को समझने के लिए पर्याप्त नहीं जानता, हालांकि। शीर्षक लेबल कैसे काम करता है यह बताने की देखभाल? तुम्हारी मदद के लिए शुक्रिया! –

+0

यह आसान है। यह सिर्फ लेबल के दाईं ओर (x2) के लिए एक अभिव्यक्ति सेट करता है। अभिव्यक्ति में बाएं बटन का एक्स है और इसे संदर्भित करने में सक्षम होने के लिए मैंने बी 1 की एक आईडी सेट की है। –

1

आप जेएक्सएलयर का उपयोग कर सकते हैं और बटन को ग्लासपाइन में डाल सकते हैं।

JButton closeButton = new JButton("Close"); 
JButton mainMenuButton = new JButton("Menu"); 
JLabel labelTitle = new JLabel("Application"); 

JPanel panel = new JPanel(); 
panel.setLayout(new MigLayout(new LC().fillX())); 
panel.add(labelTitle, new CC().alignX("center").spanX()); 

JPanel buttonPanel = new JPanel(); 
buttonPanel.setLayout(new MigLayout(new LC().fillX())); 
buttonPanel.add(closeButton, new CC().alignX("right").split()); 
buttonPanel.add(mainMenuButton, new CC().alignX("right")); 
buttonPanel.setOpaque(false); 

JXLayer<JPanel> mainPanel = new JXLayer<JPanel>(); 
mainPanel.setView(panel); 
mainPanel.setGlassPane(buttonPanel); 

JFrame frame = new JFrame(); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.setContentPane(mainPanel); 
frame.setSize(400, 600); 
frame.setVisible(true); 
+0

मुझे पूरा यकीन है कि यह काम करेगा, लेकिन मैं मिगलाउट के साथ समाधान ढूंढ रहा हूं, वैसे भी धन्यवाद! –

0

जब आपके JPanel बनाते समय, निम्न MigLayout प्रारंभकर्ता का उपयोग करें:
new MigLayout("","[]push[center]push[]","")

आप के बारे में बाधाओं को नहीं जानते हैं, यहाँ की जाँच करें: MigLayout Whitepaper

यह मानते हुए है आप की जरूरत नहीं है इस जेपीनेल में कुछ और ...

+0

कोशिश करने के लिए धन्यवाद, लेकिन यह काम नहीं करता है, यह अभी भी रिमेनिंग स्पेस में केंद्रित हो जाता है, जो पैनल का केंद्र नहीं है। –

+0

क्या आपने लेबल जोड़ने के दौरान 'डॉक सेंटर" की कोशिश की है? – BenCole

+0

हाँ, और यह काम नहीं किया, मुझे नहीं पता क्यों, हालांकि। @ माइकल ग्रीव ने मुझे एक कामकाजी समाधान दिया, कोशिश करने के लिए धन्यवाद! –