मेरे पास एक कस्टम पैनल है (APanel)। दो सवाल:

  1. पैनल के बाईं ओर संरेखित करने के लिए मुझे लेबल ("शीर्ष लेबल") और उप पैनल (bPanel) की आवश्यकता है। bPanel बाईं ओर अलाइन हो रहा है लेकिन टॉप लेबल बीच में लगाया जा रहा है। मैं कैसे ठीक करूं?

    यहां छवि विवरण दर्ज करें

  2. मैं लेबल और bPanel कैसे सेट करूं ताकि वे लंबवत आकार में न बदलें और पूरे फ्रेम का विस्तार होने पर एक-दूसरे के बीच समान लंबवत दूरी बनाए रखें? दूसरे शब्दों में, मैं नीचे की घटनाओं को होने से कैसे रोकूँ?

    < img alt="यहां छवि विवरण दर्ज करें" src="https://i.stack.imgur.com/iMoht.png"/>

APanel और bPanel के लिए कोड नीचे दिए गए हैं। यदि यह महत्वपूर्ण है, तो APanel को JFrame में BorderLayout पर सेट CENTER घटक के रूप में लोड किया जाता है (यहां फ्रेम कोड शामिल नहीं है)।

public class APanel extends JPanel {

    private JLabel jLabel1;
    private BPanel bPanel; 

    public APanel () {
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 

        jLabel1 = new JLabel("Top Label", JLabel.LEFT);
        jLabel1.setHorizontalAlignment(SwingConstants.LEFT);
        jLabel1.setBorder(BorderFactory.createLineBorder(Color.BLACK)); 
        add(jLabel1);

        bPanel = new BPanel();
        bPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        add(bPanel); 

        this.setAlignmentX(LEFT_ALIGNMENT);

    }

    private class bPanel extends JPanel {
        private JLabel sLabel;
        private JLabel tLabel;

        public bPanel() {
            sLabel = new JLabel("Jeepers");
            tLabel = new JLabel("Creepers");

            setLayout(new GridBagLayout());           
            GridBagConstraints gc = new GridBagConstraints();

            gc.gridx = 0;
            gc.gridy = 0;
            gc.weightx = 1;
            gc.weighty = 1;
            gc.fill = GridBagConstraints.HORIZONTAL;
            add(sLabel, gc);

            gc.gridx = 1;
            add(tLabel, gc);

        }
    }
}
0
Jeff 14 जून 2020, 19:09

1 उत्तर

सबसे बढ़िया उत्तर

पैनल के बाईं ओर संरेखित करने के लिए मुझे लेबल ("शीर्ष लेबल") और उप पैनल (bPanel) की आवश्यकता है।

jLabel1.setHorizontalAlignment(SwingConstants.LEFT);

कंटेनर के संबंध में संरेखण को नियंत्रित करने का गलत तरीका। जेएलएबल एपीआई पढ़ें। यदि लेबल का आकार पाठ के पसंदीदा आकार से बड़ा है, तो उस विधि का उपयोग पाठ को JLabel की सीमा के भीतर संरेखित करने के लिए किया जाता है।

this.setAlignmentX(LEFT_ALIGNMENT);

बंद करें, लेकिन इसकी आवश्यकता नहीं है क्योंकि अगर इस पूरे पैनल के अपने मूल कंटेनर में संरेखण को संदर्भित करता है।

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

स्विंग ट्यूटोरियल से संरेखण समस्याओं को ठीक करना अधिक जानकारी के लिए।

मैं लेबल और bPanel कैसे सेट करूं ताकि वे लंबवत आकार में न बदलें और पूरे फ्रेम का विस्तार होने पर एक-दूसरे के बीच समान लंबवत दूरी बनाए रखें?

अतिरिक्त स्थान उपलब्ध होने पर BoxLayout घटकों को (उनके अधिकतम आकार तक) बढ़ने की अनुमति देगा। JLabel के लिए अधिकतम आकार उसके पसंदीदा आकार के समान है। JPanel के लिए अधिकतम आकार Integer.MAX_VALUE का मान है।

तो आप कोड के साथ अपने पैनल की getMaximumSize() विधि को ओवरराइड कर सकते हैं जैसे:

@Override
public Dimension getMaximumSize()
{
    Dimension preferred = getPreferredSize();
    Dimension maximum = super.getMaximumSize();
    maximum.height = preferred.height;

    return maximum;
}

या दूसरा विकल्प पैनल को किसी अन्य पैनल में लपेटना है जो ऊंचाई का सम्मान करेगा। उदाहरण के लिए।

JPanel wrapper = new JPanel( new BorderLayout() );
wrapper.add(bPanel, BorderLayout.PAGE_START);
add(wrapper);
//add(bPanel);
1
camickr 14 जून 2020, 17:31