مكونات في GridLayout مع jpanel تملأ الشبكة بشكل غير صحيح
-
29-09-2019 - |
سؤال
أحاول منع Gridlayout في JPanel من ملء الخلايا بالكامل وتجاهل أي مجموعة من المكونات
أنا أستخدم هذا الرمز:
import javax.swing.*;
import java.awt.*;
public class GrideComponents{
public static void main(String[] args) {
JFrame frame = new JFrame("Laying Out Components in a Grid");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new GridLayout(5,2,0,0));
panel.add(new JLabel("Enter name"));
JTextField a = new JTextField(5);
a.setSize(10, 10);
panel.add(a);
panel.add(new JLabel("Enter Roll"));
panel.add(new JTextField(3));
panel.add(new JLabel("Enter Class"));
panel.add(new JTextField(3));
panel.add(new JLabel("Enter Total Marks"));
panel.add(new JTextField(3));
panel.add(new JButton("Ok"));
panel.add(new JButton("Cancel"));
frame.add(panel);
frame.setSize(400,400);
frame.setVisible(true);
}
}
وكل مكون يملأ خلية GRIS بدلاً من أن يكون في الحجم المحدد.
شكرًا
المحلول
اقرأ البرنامج التعليمي المتأرجح على باستخدام مديري التخطيط لذلك أنت تفهم أساسيات كيفية عمل مديري التخطيط.
GridLayout يغير جميع المكونات بنفس الحجم.
عند إنشاء نموذج ، ستعمل عمومًا على لوحات مختلفة باستخدام مديري تخطيط مختلف للحصول على التأثير الذي تريده.
في هذه الحالة ، قد تستخدم FlowLayout للأزرار. ثم يمكنك استخدام Gridbaglayout أو SpringLayout للمكونات الأخرى.
نصائح أخرى
هل حاولت تعيين setMaximumSize و setPreferredSize؟
في أي حال ، أوصي بك المحاولة ميجليوت لجميع احتياجات التخطيط الخاصة بك. ستندهش من بساطتها!
الهدف الكامل من Gridlayout هو تخطيط المكونات في شبكة عادية. لك setSize
سيتم تجاوز المكالمات من قبل مدير التخطيط. ربما setPreferredSize
أو setMaximumSize
قد تعمل ، ولكن الأمر متروك لمدير التخطيط لتقرر أخذها في الاعتبار.