ما الفرق بين Default_size و Preferred_size؟
-
23-09-2019 - |
سؤال
أنا أستخدم Swing Grouplayout وأنا مرتبك بشأن القيم GroupLayout.DEFAULT_SIZE
و GroupLayout.PREFERRED_SIZE
. لا أعرف أبدًا متى أستخدم كل واحد منهم في أساليب مثل GroupLayout.addComponent(Component, int, int, int)
.
افترض أن لدي هذا الرمز:
GroupLayout l = ...;
l.setHorizontalGroup(l.createSequentialGroup()
.addComponent(tf1)
.addComponent(tf2));
l.setVerticalGroup(l.createParallelGroup()
.addComponent(tf1)
.addComponent(tf2));
هنالك اثنان JTextField
S على خط واحد وضع مع GroupLayout
(مجموعة متتابعة واحدة أفقيا ومجموعة متوازية عموديا). إذا قمت بتغيير حجم النافذة الآن ، فإن كلا المكونين يحصلان على المساحة المتاحة (50 ٪ لكل منهما). لكني أريد فقط أن ينمو/حقل النص الأول/يتقلص أفقياً ، وحقل النص الثاني فقط ينمو/يتقلص رأسياً. ما قيم دقيقة, مسبق و الأعلى هل يجب أن أستخدم لإنجاز ذلك؟ أعلم أنه يمكنني فقط تجربته ومعرفة ما هو المزيج الذي يعمل ، لكنني أود أن أعرف المنطق وراء هذه المشكلة.
المحلول
يمكن العثور على بعض التوجيهات في كيفية استخدام grouplayout: حجم المكون وإعادة التوحيد. متعلق DEFAULT_SIZE
و PREFERRED_SIZE
,
يمكن استخدامها كمعلمات في الطريقة
addComponent(Component comp, int min, int pref, int max)
لإجبار أحد المكون على التقيد (السماح بالتقلص والنمو):
group.addComponent(component, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
هذا يسمح للمكون بتغيير حجمه بين حجم الصفر (الحد الأدنى) إلى أي حجم (
Short.MAX_VALUE
كما الحد الأقصى للحجم يعني "لانهائي"). إذا أردنا أن لا يتقلص المكون أقل من الحد الأدنى للحجم الافتراضي ، فسنستخدمهGroupLayout.DEFAULT_SIZE
بدلا من 0 في المعلمة الثانية.لجعل المكون ثابتًا ثابتًا (قمع تغيير حجمه):
group.addComponent(component, GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)...
ومن المثير للاهتمام ، أن القيم الثابتة سلبية ، لذلك لا يمكن أن تكون مخطئة في القيود الفعلية.
نصائح أخرى
كنت مرتبكًا أيضًا حول كيفية GroupLayout.DEFAULT_SIZE
و GroupLayout.PREFERRED_SIZE
تستخدم في GroupLayout.SequentialGroup.addComponent(Component c, int min, int pref, int max)
, ، حتى بعد الرجوع إلى قسم Grouplayout في دروس Java ومقال Java.net بعنوان التعرف على Grouplayout ، الجزء 1.
الغوص في JDK 1.6.0_27 grouplayout.javasource وجدت الإجابات في فئة المكونات. من ذلك تمكنت من حل هذه القواعد:
إذا كانت هناك حاجة إلى الحد الأدنى للحجم:
- والمتوفر
min
القيمة غير سالبة ، يتم إرجاع هذه القيمة. - آخر إذا كان كذلك
PREFERRED_SIZE
, ، نتبع القواعد للحجم المفضل. - وإلا يتم إرجاع الحد الأدنى للحجم للمكون.
إذا كانت هناك حاجة إلى حجم مفضل:
- والمتوفر
pref
القيمة غير سالبة ، يتم إرجاع هذه القيمة. - آخر إذا كان كذلك
DEFAULT_SIZE
أوPREFERRED_SIZE
, ، إرجاع الحجم المفضل للمكون.
إذا كانت هناك حاجة إلى أقصى حجم:
- والمتوفر
max
القيمة غير سالبة ، يتم إرجاع هذه القيمة. - آخر إذا كان كذلك
PREFERRED_SIZE
, ، نتبع القواعد للحجم المفضل. - وإلا يتم إرجاع الحد الأقصى للمكون.
كما لاحظ Trashgod بالفعل ، فإن التعريفات سلبية. أي قيمة سالبة أخرى لـ Min و Pref و Max إلى جانب ذلك DEFAULT_SIZE
أو PREFERRED_SIZE
هي أخطاء وتأثيرات ضرب.
التفاعل بين SequentialGroup.addComponent
لم تكن أحجام Min و Pref و Max واضحة على الفور من البرنامج التعليمي. الآن أعرف لماذا PREFERRED_SIZE,DEFAULT_SIZE,PREFERRED_SIZE
ثابت ، لماذا لا يهم إذا كانت الوسيطة الوسطى DEFAULT_SIZE
أو PREFERRED_SIZE
وكيف أنشأ NetBeans قيم حجم ثابتة مثل DEFAULT_SIZE,300,Short.MAX_VALUE
الشغل.