سؤال

بلدي الحالي المشكلة هي أن لدي JFrame مع 2x2 جريدلايوت.و داخل أحد الساحات لدي JPanel هذا هو عرض الشبكة.أنا بعد مجال في اليوم مع جافا سوينغ المكتبة...نلقي نظرة

صورة

جافا تلقائيا توسيع كل JLabel لتناسب الشاشة.أريد فقط أن تكون تلك المربعات الزرقاء (الماء) و الحدود السوداء و ليس المساحة الرمادية.هل هناك طريقة يمكنني تعيين حجم هذا JPanel بشكل دائم بحيث لا تضطر إلى الذهاب من خلال تغيير حجم JFrame مليون مرة قبل أن أحصل على البعد الدقيق بحيث المساحة الرمادية يختفي ؟

وأود أيضا أن تعيين حجم تلك الأزرار بحيث لا تكون ضخمة جدا (BorderLayout تستخدم الأزرار الحقل النصي)

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

المحلول

إذا كنت تريد اثنين checkerboards أن تبقى نفس الحجم, ثم سوف تحتاج إلى أن يكون كل منهم الواردة في الخاصة بهم JPanel.تعيين كل من تلك الأم JPanel هو أن يكون هناك تخطيط نوع من GridBagLayout.تعيين preferedSize لكل الشطرنج العنصر ومن ثم إضافتها إلى الحاويات الخاصة بكل منها.GridBagLayout أن افتراضيا وضع كل مجلس في وسط الوالدين JPanel.حتى تغيير حجم النافذة ، JPanel الأم المنطقة سوف تحصل على أكبر أو أصغر ، ولكن الشطرنج المكونات داخل ستبقى نفس الحجم.

بدلا من ذلك, هل يمكن أن يكون الخاصة بك في المربعات الزرقاء الحجم إلى الحجم المناسب كما يتم تغيير حجم النافذة من خلال وجود كل checkboard مربع يكون JPanel مع BorderLayout مدير تخطيط و إضافة JLabel (مع خلفية زرقاء اللون) إلى BorderLayout.CENTER موقع.

أما بالنسبة الأزرار الخاصة بك ، في محاولة شيء من هذا القبيل:

JPanel theButtonPanel = new JPanel(new BorderLayout());
JButton button1 = new JButton("Fire");
JButton button2 = new JButton("Pass");
JButton button3 = new JButton("Forfiet");

JPanel innerButtonContainer = new JPanel(new Grid(1, 3, 8, 8));
innerButtonContainer.add(button1);
innerButtonContainer.add(button2);
innerButtonContainer.add(button3);

theButtonPanel.add(innterButtonContainer);

وأخيرا النظر في استخدام تصميم أداة سوينغ الخاص بك واجهة المستخدم.Netbeans له واجهة المستخدم ممتازة مصمم صلب عليه.تحميل Netbeans هنا.

نصائح أخرى

GridBagLayout هو ما كنت تريد حقا أن استخدام.على جريدلايوت قوة نفس حجم كل عنصر في التخطيط بغض النظر عن حجم القيود التي وضعت على لهم.GridBagLayout هو الكثير أكثر قوة و أكثر تعقيدا.دراسة على API الصفحة من أجل ذلك.باستخدام GridBagLayout, مكونات لن تملأ الشبكة كلها الفضاء إذا كنت لا تريد لهم وحتى يمكن البقاء الحجم الذي كنت أسأل أن يكون.للحفاظ على عنصر الحجم من تغيير ، وأود أن مجموعة الثلاثة المتاحة حجم القيود:

water.setPreferredSize(new Dimension(20, 20));
water.setMinimumSize(new Dimension(20, 20));
water.setMaximumSize(new Dimension(20, 20));

على الأزرار الخاصة بك, أنا بالتأكيد استخدام الداخلية الفريق بريان ويذكر.يمكنك استخدام إما جريدلايوت وكأنه يوحي أو FlowLayout إذا كنت لا تريد كل الأزرار تكون نفس الحجم.إضافة جميع الأزرار الخاصة بك إلى أن الداخلية الفريق بدلا من واحد الرئيسي.

إذا يمكنك setResizeable( false ) على الإطار المستوى الأعلى يمكنك ثم تعيين مدير تخطيط لاغية ورمز القرص الثابت لكل موقع وحجم عبر setBounds. هذه هي الطريقة التي أود أن تفعل ذلك (يتوقف على تغيير حجم طبعا).

ولقد كان نجاح حل مثل هذه المشاكل باستخدام TableLayout وهو ثالث مدير تخطيط الحزب. سوف تحتاج إلى تحميل البرنامج وقراءة البرنامج التعليمي ولكن أن يكون المفتاح لضبط مبرر لCENTER عند إضافة JButtons إلى مواقعها في التخطيط.

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