سؤال

لدي فئة فرعية JPanel التي أضيف فيها التروما، التسميات، الجداول، إلخ. لتظهر على الشاشة، استخدم JFrame:

MainPanel mainPanel = new MainPanel(); //JPanel subclass

JFrame mainFrame = new JFrame();
mainFrame.setTitle("main window title");
mainFrame.getContentPane().add(mainPanel);
mainFrame.setLocation(100, 100);
mainFrame.pack();
mainFrame.setVisible(true);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

ولكن عندما أكون حجم النافذة، لا تتغير حجم اللوحة. كيفية جعل حجم لوحة لتكون نفس حجم النافذة حتى لو تم تغيير حجمها؟

هل كانت مفيدة؟

المحلول

يمكنك تعيين مدير تخطيط مثل Borderlayout ثم حدد أكثر تحديدا، حيث يجب أن تذهب اللوحة الخاص بك:

MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new BorderLayout());
mainFrame.add(mainPanel, BorderLayout.CENTER);
mainFrame.pack();
mainFrame.setVisible(true);

هذا يضع اللوحة في منطقة مركز الإطار وتتيح أنه ينمو تلقائيا عند تغيير حجم الإطار.

نصائح أخرى

تحتاج إلى تعيين مدير تخطيط ل Jeframe للاستخدام - هذا يتعامل مع كيفية وضع المكونات. واحد مفيد هو مدير Borderlayout.

ببساطة إضافة سطر التعليمات البرمجية التالي يجب إصلاح مشاكلك:

mainFrame.setLayout(new BorderLayout());

(قم بذلك قبل إضافة مكونات إلى JFrame)

إذا كان خيار Borderlayout الذي يوفره أصدقاؤنا لا يعمل، فحاول إضافة مكونات NectentListerner إلى JFrame وتنفيذ طريقة ComponentResized (Event). عند تغيير حجم كائن JFrame، سيتم استدعاء هذه الطريقة. لذلك إذا كتبت التعليمات البرمجية لتعيين حجم JPanel في هذه الطريقة، فستحقق النتيجة المقصودة.

أنا أعرف أن هذا "الحل" ليس جيدا ولكن استخدامه كشبكة أمان. ؛)

من تجربتي، استخدمت Gridlayout.

    thePanel.setLayout(new GridLayout(a,b,c,d));

A = رقم الصف، B = رقم العمود، C = الفجوة الأفقية، D = الفجوة الرأسية.


على سبيل المثال، إذا كنت ترغب في إنشاء لوحة مع:

  • صف غير محدود (تعيين A = 0)
  • 1 عمود (تعيين ب = 1)
  • الفجوة الرأسية = 3 (مجموعة D = 3)

الرمز أدناه:

    thePanel.setLayout(new GridLayout(0,1,0,3));

هذه الطريقة مفيدة عندما تريد إضافة jscrollpane إلى JPanel الخاص بك. سيتغير حجم JPanel داخل Jscrollpane تلقائيا عند إضافة بعض المكونات عليها، لذلك سيتم إعادة ضبط JSCrollPane تلقائيا شريط التمرير تلقائيا.

كما قالت الملصقات الأخرى، تحتاج إلى تغيير LayoutManager التي يتم استخدامها. كنت أفضل دائما باستخدام Gridlayout حتى يصبح الكود الخاص بك:

MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new GridLayout());
mainFrame.pack();
mainFrame.setVisible(true);

يبدو أن Gridlayout صحيحة من المفاهيم بالنسبة لي عندما تريد أن تأخذ اللوحة الخاصة بك الشاشة بأكملها.

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