दिलचस्प पोस्ट
क्लोन कैसे करें या एक सूची कॉपी करें? क्या कोई भी खुला स्रोत सी पुस्तकालय सामान्य डेटा संरचनाओं के साथ हैं? एंड्रॉइड: बैक स्टैक को साफ़ करें वीडियो चलाने के लिए नया यूनिटी विडियोप्लेयर और वीडियोक्लिप एपीआई का उपयोग करना ज्यूनेट 4 में सैद्धांतिक रूप से अनदेखी जांच दशमलव श्रेणी () चरण मान का उपयोग कैसे करें? क्या कोई विदेशी कुंजी नल और / या डुप्लिकेट हो सकती है? कंसोल खिड़की मेरे आउटपुट को प्रदर्शित किए बिना क्यों तुरंत बंद हो रही है? सरणी तत्वों को क्रमबद्ध करें (संख्याओं वाला स्ट्रिंग), प्राकृतिक सॉर्ट करें AsyncTask एंड्रॉइड उदाहरण सी ++ में क्लास प्रारंभकर्ता में एक कॉन्स्ट ऑरेरेज़ को प्रारंभ करें एंड्रॉइड स्टूडियो और ग्रेडल में 1.7 सेट कैसे करें जब मैं "रन" कमांड को निष्पादित करता हूँ तो मैं कैसे उपयोग करता है डिफ़ॉल्ट पोर्ट (9000) को बदल सकता हूँ? लॉगआउट: प्राप्त करें या पोस्ट करें? दो समय स्ट्रिंग्स के बीच समय अंतराल की गणना कैसे करें

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

मैं कुछ गतिशील रूप से जेनरेट किए गए डेटा इनपुट रूपों में घटकों का प्रबंधन करने के लिए 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()); } 

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

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

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

इस उदाहरण में, 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(); } }); } }