لوحة تحتوي على التفاف الأسطر وكسر الأسطر في Java Swing
-
19-08-2019 - |
سؤال
كيفية تنفيذ لوحة تدعم التفاف الأسطر وكسر الأسطر؟أود فقط إضافة تسميات نصية وفواصل أسطر إلى هذه اللوحة.يجب أن تتدفق الملصقات من اليسار إلى اليمين ، والتفاف إلى "السطر" التالي إذا حاجه.قد يؤدي فواصل الأسطر إلى الانتقال إلى السطر التالي.أود أيضًا أن أجعل اللوحة قابلة للتمرير عموديًا.
يجب أن يعمل الحل في Java 5.يمكن استخدام سوينغ اكس.
إيضاح:التسميات النصية هي في الواقع JXHyperlink
ق (من سوينغ إكس) ،
أي.تحتوي اللوحة على تسميات قابلة للنقر عليها.هذا هو السبب في أنني لا أستطيع استخدام فقطJTextArea
.
المحلول 3
ولقد وجدت JTextPane
، التي كنت قد تجاهلها من قبل لسبب ما. هذه الفئة يفعل ما أحتاج.
وشكرا لمساعدتكم على الرغم من. :)
نصائح أخرى
وUPDATE: فاتني طلب للحصول على دعم الارتباط التشعبي. لا أعرف كيف نفعل ذلك ث / س باستخدام EditorPane.
وJTextArea يفعل بالضبط ما كنت قد وصفها.
JTextArea textArea = new JTextArea();
JScrollPanel sPane = new JScrollPane(textArea);
نص بديل http://img187.imageshack.us/img187/3238/wraprn0.png
هذه العينة ليست من لوحة، أي حاوية، ولكن من JLabel، الذي يهدف إلى عرض المحتوى.
يمكنك استخدام HTML في المحتوى الخاص بك واستخدام <br> في كل فاصل. أنت يجب أن تحسب الفواصل برمجيًا وفقًا لقواعدك الخاصة بتغيير حجم المكون.
إليك الكود:
import javax.swing.*;
import java.awt.*;
public class Wrap {
public static void main( String [] args ) {
JFrame frame = new JFrame("Wrap test");
String text = "<html>This<br>is<br>a<br>multiline<br>label</html>";
frame.add( new JLabel( text ) );
frame.pack();
frame.setVisible( true );
}
}
على الرغم من أنه قد لا يكون الحل الذي تبحث عنه، ولكن من المتطلبات التي لديك، يبدو وكأنه مخصص LayoutManager
قد تكون قادرًا على تحقيق ما تسعى إليه.من خلال تصميم وتعيين مدير تخطيط مخصص يسمح بفواصل الأسطر لـ Container
(مثل Panel
)، ينبغي أن يكون من الممكن أن يكون Panel
مما يسمح بفواصل الأسطر.
ال وضع المكونات داخل الحاوية مقالة من دروس جافا سيوفر معلومات عامة حول كيفية عمل مديري التخطيط في Java، وعلى وجه الخصوص، إنشاء مدير تخطيط مخصص سيوفر معلومات حول كيفية إنشاء مدير تخطيط مخصص لتطبيقه على Container
.
سلوك ال FlowLayout
(مدير التخطيط الافتراضي لـ Panel
) يبدو قريبًا إلى حد ما من السلوك الذي قد تسعى إليه.تبدو إضافة وظيفة إلى فاصل الأسطر وكأنها القطعة المفقودة.
اقتراح: ربما يكون لدى مدير التخطيط المخصص القدرة على إضافة فاصل أسطر من خلال وجود Component
يمثل فاصل أسطر، والذي يمكن إضافته إلى ملف Container
باستخدام add()
طريقة.
على سبيل المثال، لديك فئة ثابتة Component
في مدير التخطيط المخصص مثل (افتراضي) LineBreakLayout.LINE_BREAK
, ، وإضافة ذلك إلى Container
يمكنه إخبار مدير التخطيط المخصص بالانتقال إلى السطر التالي.ربما يمكن أن يكون التنفيذ مثل:
Panel p = new Panel(new LineBreakLayout());
p.add(new Label("First Line"));
p.add(LineBreakLayout.LINE_BREAK);
p.add(new Label("Second Line"));
ما سبق افتراضية LineBreakLayout
سيتم بعد ذلك تقديم الأول Label
في سطر واحد والثاني Label
في السطر الثاني.