दिलचस्प पोस्ट
पिछले फ़ंक्शन के पूरा होने के बाद फ़ंक्शन को कॉल करें एक MySQL SELECT क्वेरी में IF स्टेटमेंट का उपयोग करना pylab / networkx; अद्यतन के बाद प्रदर्शित कोई नोड लेबल नहीं Google मानचित्र V3: जर्मन राज्य बहुभुज को ड्रा करें? हर दिन दोपहर एक सेवा को कैसे चलाने के लिए, और हर बूट पर कैसे आईओएस सिस्टम ध्वनि को निष्क्रिय करने के लिए जावा 8 विधि संदर्भ अप्रतिबंधित अपवाद पिकासो छवि की लोडिंग AsyncTask के अंदर पैदा की Webservice का उपयोग करने में त्रुटि, सामग्री प्रकार "application / xop + xml" अपेक्षित प्रकार "text / xml" से मेल नहीं खाती जावा दिनांक माह अंतर मैपकिट आईओएस के साथ ग्रेडियंट पॉलीलाइन त्वरित और आसान: पायथन के साथ ट्रेनीकॉन? फ़ॉर्म लोड अपवाद क्यों नहीं पकड़े? मैं Google Chrome JavaScript कंसोल में डीबग संदेशों को कैसे प्रिंट करूं? जेएस में डीओएम तत्व के लिए कंप्यूट फ़ॉन्ट आकार प्राप्त करें

स्विंग ग्रुप लेआउट: घटक के आकारों का आकार बदलना और सीमित करना

मैं कुछ गतिशील रूप से जेनरेट किए गए डेटा इनपुट रूपों में घटकों का प्रबंधन करने के लिए GroupLayout का उपयोग कर रहा हूं। लेआउट उतना ही कम है जैसे:

 *-----------------------------------------------* | label A | field A | | label B | field B | | label C | field C | *-----------------------------------------------* 

मैं क्षैतिज लेआउट के लिए 2 समानांतर समूहों का उपयोग कर रहा हूं, और ऊर्ध्वाधर लेआउट के लिए एक एकल अनुक्रमिक समूह। अधिकांश भाग के लिए, सब कुछ ठीक काम कर रहा है।

मैं लेबल्स की अधिकतम चौड़ाई (जो सिर्फ JLabel उदाहरण हैं) को माता-पिता JFrame की चौड़ाई के 1/3 तक सीमित करना चाहता हूं। अगर JFrame एक निश्चित आकार था, तो यह तुच्छ हो जाएगा, लेकिन मुझे उसका आकार बदलना होगा।

मैं JFrame से ComponentListener.componentResized() घटनाओं को उठा रहा हूं, लेकिन मैं एक बार इस बात पर फंस गया है कि एक बार मुझे ऐसा कार्यक्रम कब प्राप्त होगा।

मैंने बिना कोई भाग्य के इस दृष्टिकोण की कोशिश की है:

 public void componentResized(ComponentEvent e) { int maxW = parentFrame.getWidth() / 3; for (JLabel l : labels) { l.setMaximumSize( // have also tried setSize() and setPreferredSize() new Dimension( Math.min(l.getSize().width, maxW), l.getMaximumSize().height)); } groupLayout.invalidateLayout(getContentSpace()); } 

क्या कोई लेबल्स की चौड़ाई को सीमित करने का एक तरीका सुझा सकता है जो काम करेगा?

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

Solutions Collecting From Web of "स्विंग ग्रुप लेआउट: घटक के आकारों का आकार बदलना और सीमित करना"

इस उदाहरण में, GroupLayout किसी भी setXXXSize() विधि का सहारा लेने के बिना, केवल लेबल के पसंदीदा आकार पर भरोसा कर सकता है। इस दृष्टिकोण में,

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

लेबल का सही उपयोग करने के लिए GroupLayout.Alignment.TRAILING का उपयोग एक निजी प्राथमिकता है, और मैंने यह दिखाने के लिए एक दूसरा पैनल जोड़ा है कि यह किसी और लेआउट में कैसे काम करता है।

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

 import java.awt.EventQueue; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.GroupLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; /** @see http://stackoverflow.com/questions/8492065 */ public class GroupPanel extends JPanel { private JLabel label1 = new JLabel("Primary:"); private JTextField field1 = new JTextField(16); private JLabel label2 = new JLabel("Secondary:"); private JTextField field2 = new JTextField(16); private JLabel label3 = new JLabel("Tertiary:"); private JTextField field3 = new JTextField(16); public GroupPanel(int n) { this.setBorder(BorderFactory.createTitledBorder("Panel " + n)); GroupLayout layout = new GroupLayout(this); this.setLayout(layout); layout.setAutoCreateGaps(true); layout.setAutoCreateContainerGaps(true); layout.setHorizontalGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING) .addComponent(label1) .addComponent(label2) .addComponent(label3)) .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(field1) .addComponent(field2) .addComponent(field3)) ); layout.setVerticalGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(label1) .addComponent(field1)) .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(label2) .addComponent(field2)) .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(label3) .addComponent(field3)) ); } private static void display() { JFrame f = new JFrame("GroupPanel"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLayout(new BoxLayout(f.getContentPane(), BoxLayout.Y_AXIS)); f.add(new GroupPanel(1)); f.add(new GroupPanel(2)); f.add(Box.createVerticalGlue()); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { display(); } }); } }