جافا، سوينغ:كيف أقوم بتعيين الحد الأقصى لعرض JTextField؟

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

  •  02-07-2019
  •  | 
  •  

سؤال

أنا أكتب مكون اختيار ملف مخصص.في واجهة المستخدم الخاصة بي، يقوم المستخدم أولاً بالنقر فوق الزر، الذي ينبثق JFileChooser;عند إغلاقه، يتم كتابة المسار المطلق للملف المحدد إلى ملف JTextField.

المشكلة هي أن المسارات المطلقة عادة ما تكون طويلة، مما يؤدي إلى تكبير حقل النص، مما يجعل حاويته واسعة جدًا.

لقد حاولت ذلك، لكنه لم يفعل أي شيء، ولا يزال حقل النص واسعًا جدًا:

fileNameTextField.setMaximumSize(new java.awt.Dimension(450, 2147483647));

حاليًا، عندما يكون فارغًا، يبلغ طوله 400 بكسل بالفعل، بسبب GridBagConstraints أضفها له.

أود أن تكون مثل الحقول النصية في صفحات HTML، ذات حجم ثابت ولا يتم تكبيرها عندما يكون الإدخال طويلًا جدًا.

لذا، كيف يمكنني ضبط الحجم الأقصى لـ a JTextField ?

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

المحلول

قد يعتمد ذلك على مدير التخطيط الذي يوجد به حقل النص الخاص بك.يتوسع بعض مديري التخطيط والبعض الآخر لا يفعل ذلك.بعضها يتوسع فقط في بعض الحالات، والبعض الآخر دائمًا.

أفترض أنك تفعل

filedNameTextField = new JTextField(80); // 80 == columns

إذا كان الأمر كذلك، بالنسبة لمعظم التخطيطات المعقولة، يجب ألا يتغير حجم الحقل (على الأقل، يجب ألا ينمو).غالبًا ما يتصرف مديرو التخطيط بشكل سيء عند تعيينهم JScrollPaneس.

في تجربتي، أحاول التحكم في الأحجام عبر setMaximumSize و setPreferredWidth وما إلى ذلك غير مستقرة في أحسن الأحوال.لقد قرر Swing من تلقاء نفسه مع مدير التخطيط وليس هناك الكثير مما يمكنك فعله حيال ذلك.

بعد كل ما قيل، لم أواجه المشكلة التي تواجهها، مما يقودني إلى الاعتقاد بأن الاستخدام الحكيم لمدير التخطيط سيحل المشكلة.

نصائح أخرى

لقد قمت بحل هذه المشكلة عن طريق تعيين الحد الأقصى للعرض على حاوية حقل النص، باستخدام setMaximumSize.

وفقًا لإجابة دافيترون، يعد هذا حلاً هشًا، لأن مدير التخطيط قد يتجاهل هذه الخاصية.في حالتي، الحاوية هي الأعلى، وقد نجحت في الاختبار الأول.

لا تقم بتعيين أي من الأحجام في حقل النص.بدلاً من ذلك، قم بتعيين حجم العمود إلى قيمة غير صفرية عبر setColumns أو باستخدام المنشئ مع وسيطة العمود.

ما يحدث هو أن الحجم المفضل الذي أبلغ عنه JTextComponent عندما تكون الأعمدة صفرًا هو إجمالي مقدار المساحة اللازمة لعرض النص.عند تعيين الأعمدة إلى قيمة غير الصفر، يكون الحجم المفضل هو الحجم المطلوب لإظهار هذا العدد من عروض الأعمدة القياسية.(بالنسبة لخط متغير الدرجة، يكون عادةً قريبًا من حجم الحرف الصغير 'm').مع تعيين الأعمدة على الصفر، يطلب حقل النص أكبر قدر ممكن من المساحة ويمتد إلى خارج الحاوية بأكملها.

نظرًا لأنه لديك بالفعل في GridBagLayout مع تعبئة، فمن المحتمل أن تتمكن فقط من ضبط الأعمدة على 1 والسماح للتعبئة بتمديدها بناءً على المكونات الأخرى، أو أي رقم آخر منخفض مناسب.

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