अधिकांश लेआउट प्रबंधकों के पास कोई तर्क नहीं है (यानी, आप new FlowLayout()
के साथ फ़्लोलाउट बना सकते हैं, new GridLayout()
के साथ एक ग्रिडलाउट, new GridBagLayout()
आदि के साथ एक ग्रिडबैगआउट)। हालांकि, BoxLayout
की आवश्यकता है कि आप दोनों कंटेनर को पास करें कि यह प्रबंधन करेगा और धुरी जिसके साथ घटकों को रखा जाना चाहिए।आपको BoxLayout के साथ setLayout का आह्वान करने की आवश्यकता क्यों है?
मेरे सवाल यह है: के बाद से आप पहले से ही लेआउट प्रबंधक जो घटक बाहर बिछाने के लिए कह रहे हैं, तुम क्यों
BoxLayout bl = new BoxLayout(myPanel, BoxLayout.Y_AXIS);
myPanel.setLayout(bl);
सिर्फ पहली पंक्ति के बजाय लिखने के लिए की जरूरत है?
मैंने the BoxLayout
source code पर एक त्वरित नज़र डाली और देखा कि मैं जिस कंस्ट्रक्टर का उपयोग करता हूं (लाइन 178-185) target.setLayout(this)
या इस तरह के किसी भी चीज़ पर कॉल नहीं करता है। ऐसा लगता है कि इसे जोड़ने के लिए वास्तव में आसान होगा। क्या ऐसा कोई कारण है कि इसे स्विंग लाइब्रेरी में शामिल नहीं किया गया है?
अगर यह मायने रखती है, मैं
जावा संस्करण 1.7.0
जावा (टीएम) एसई रनटाइम वातावरण का उपयोग कर रहा (निर्माण 1.7.0-b147)
Win7Pro पर ।
धन्यवाद!
SSCCE:
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
public class BoxLayoutSSCCE extends JFrame {
// Change this to see what I mean
public static final boolean CALL_SET_LAYOUT = true;
public BoxLayoutSSCCE() {
super("Box Layout SSCCE");
JPanel panel = new JPanel();
BoxLayout bl = new BoxLayout(panel, BoxLayout.Y_AXIS);
if (CALL_SET_LAYOUT) {
panel.setLayout(bl);
}
panel.add(new JButton("Button 1"));
panel.add(new JButton("Button 2"));
}
public static void main (String[] args) {
BoxLayoutSSCCE blsscce = new BoxLayoutSSCCE();
blsscce.pack();
blsscce.setVisible(true);
}
}
[sscce] (http://sscce.org/) – trashgod