/ / GridBagLayout सभी स्थान को नहीं भरता है - जावा, स्विंग, लेआउट-मैनेजर, ग्रिडबैगेलआउट

ग्रिडबैगलाउट सभी जगहों को भरता नहीं है - जावा, स्विंग, लेआउट-मैनेजर, ग्रिडबैगआउट

मेरे पास एक पैनल है जो कार्ड लेआउट के एक भाग के रूप में उपयोग किया जाता है। पैनल का उपयोग करता है GridBagLayout। मैं इसमें दो घटक जोड़ता हूं: JTextArea बीओटीएच के लिए सेट के साथ भरें और JTextField क्षैतिज करने के लिए सेट के साथ भरें। वे केवल क्षैतिज स्थान ले रहे हैं।

        // Chat card setup
JPanel chatCard = new JPanel(new GridBagLayout());
gc = new GridBagConstraints();

gc.gridx = 0;
gc.gridy = 0;
gc.fill = GridBagConstraints.BOTH;
gc.weightx = 2;
chatArea = new JTextArea();
chatCard.add(chatArea,gc);

gc.gridx = 0;
gc.gridy = 1;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.anchor = GridBagConstraints.PAGE_END;
gc.weightx = 2;
JTextField msgField = new JTextField();
msgField.setActionCommand("SendText");
msgField.addActionListener(listener);
chatCard.add(msgField, gc);

वर्तमान में यह ऐसा दिखता है

GridBagLayout के साथ पैनल

उत्तर:

उत्तर № 1 के लिए 7

के साथ प्रयास करें gc.weighty

     ...
gc.weightx = 2;
gc.weighty=1;
chatArea = new JTextArea();

...
JScrollPane scrollPane=new JScrollPane(chatArea);
chatCard.add(scrollPane,gc);
...

...
gc.weightx = 2;
gc.weighty=0;
JTextField msgField = new JTextField();
...

जोड़ना JTextArea में JScrollPane अन्यथा आपको एक अप्रत्याशित परिणाम मिलेगा जब पंक्तियाँ उसकी ऊंचाई से बड़ी होती हैं।

उपयोग gc.insets=new Insets(5, 5, 5, 5); यदि आप ऊपर / बाएँ / नीचे / दाएँ से कुछ स्थान चाहते हैं।

स्नैपशॉट:

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


जवाब के लिए 3 № 2

@ब्रज के पास ग्रिडबायलेयूट का उत्तर है - का उपयोग करेंवजनदार बाधा, और उनके जवाब के लिए 1+, लेकिन मुझे लगता है कि यदि आप एक बॉर्डरलेयूट का उपयोग करते हैं, तो आपका सेट अप बहुत बेहतर होगा, एक जेएसक्रोलपेन में अपना जेटट्रैस रखा, जेएसक्रोलपेन के बॉर्डरपाउट को रखा। BorderLayout.PAGE_END)।

  JPanel chatCard = new JPanel(new BorderLayout(5, 5));
int rows = 20;
int cols = 40;
JTextArea chatArea = new JTextArea(rows, cols);
chatCard.add(new JScrollPane(chatArea), BorderLayout.CENTER);

JTextField msgField = new JTextField(cols);
msgField.setActionCommand("SendText");
// msgField.addActionListener(listener);
chatCard.add(msgField, BorderLayout.PAGE_END);