مكونات في GridLayout مع jpanel تملأ الشبكة بشكل غير صحيح

StackOverflow https://stackoverflow.com/questions/4112886

سؤال

أحاول منع 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 قد تعمل ، ولكن الأمر متروك لمدير التخطيط لتقرر أخذها في الاعتبار.

BoxLayout هو بديل مفيد في هذا السياق ، كما هو موضح في هذا مثال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top