كيفية ضبط JTextarea على ارتفاع يتناسب مع حجم النص الذي يحتوي عليه (لتجنب أشرطة التمرير)
-
28-09-2019 - |
سؤال
تبدو هذه المشكلة تافهة ، لكن لا يمكنني العثور على الحل.
عندما أقوم بإنشاء نموذج يحتوي على ملف JTextArea
. أريد أن أضع نصًا ثابتًا كبيرًا فيه. إذا كان النص يقول 1000 سطر طويل ، أريد بلدي JTextArea
ليكون ارتفاع 1000 سطر (ليكون كبيرًا بما يكفي لعرض النص بأكمله بدون أشرطة التمرير). JTextArea
يوجد داخل لوحة يمكن أن تحتوي على شريط تمرير ، لذا فهي ليست مشكلة عندما تصبح كبيرة جدًا (هناك نوعان JTextArea
في تلك اللوحة .. شيء مثل في أداة الفرق). هل يعرف أي شخص كيف يمكنني تحقيق ذلك؟ شكرًا.
المحلول
ال BorderLayout
سوف تتعامل مع شريط التمرير خارج الصندوق إذا وضعت ببساطة الخاص بك JTextArea
في JScrollPane
قبل إضافته إلى JPanel
. FlowLayout
, ، من ناحية أخرى ، لا. لن يعرض شريط التمرير إلا إذا كان @xorty يتصل setPreferedSize()
على الخاص بك JScrollPane
واعطها البعد الذي تريده.
نصائح أخرى
يمكنك أيضًا استخدام شيء مثل هذا (العرض المحدود ، والارتفاع اعتمادًا على النص ، ومفيد عند عرض رسائل المعلومات):
public JTextArea createTextAreaFitToText(String message, Dimension minimalSize){
JTextArea aMessagePanel = new JTextArea();
aMessagePanel.setText(message);
/*for modelToView to work, the text area has to be sized. It doesn't matter if it's visible or not.*/
aMessagePanel.setPreferredSize(minimalSize);
aMessagePanel.setSize(minimalSize);
Rectangle r = aMessagePanel.modelToView(aMessagePanel.getDocument().getLength());
Dimension d = new Dimension(minimalSize.width, r.y + r.height);
aMessagePanel.setPreferredSize(d);
return aMessagePanel;
}
لزيادة أو تقليل ارتفاع JTextarea. عند إدخال نص ، اتصل بـ getPreferredSize () من jtextarea- سوف يمنحك الحجم اللازم لعرض النص بأكمله. بعد ذلك استخدم setPrefferedSize () من JScrollpane لتعيين حجم JTextarea
حسنًا ، أولاً وقبل كل شيء: إنه Jtextarea وليس Jtextarea.
الآن - ضع Jtextarea في JsCrollpane. عند إدخال نص ، اتصل بـ getPreferedSize()
من jscrollpane - سوف يمنحك حجمًا دقيقًا اللازم لعرض نص كامل. أيضًا ، لا أستخدم LayoutManager الأخرى أبدًا غير "التصميم المجاني" من NetBeans Swing Builder - لذلك لست متأكدًا من كيفية تصرف مخططات Layoutmanagers هناك.