الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

العنصر JTextPane في netbeans

بدأه intel3000 في 24 أبريل 2010 · 19 رد · 1,133 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

لدي هذه السنه مشروع هو عمل شات بالجافا

فأنا أريد ان اعرف ماهو العنصر الذي يجب ان استعمله لاظهار الحوار الجاري بين الشخصين ،و هل هو JTextPane علما انني استعمل الـ netbeans .

وماهي المتود التي استعملها لاضافة النص الى العنصر دون فقدان النص الموجود فيه من قبل.

لاني استعملت العنصر JTextPane وعملت بالمتود JTextPane_nom.setText("hello") l وكان يظهر النص hello ولكن عندما استعملها مرة ثانية مثل JTextPane_nom.setText("hello 2") l فانها تحذف النص الاول hello وتظهر النص hello 2 مكانه.

فأريد أن تساعدوني في تحديد المتود التي استعملها لاضافة النص الى العنصر دون فقدان النص الموجود من قبل

أرجو أن منكم أن تفيدوني

وجزاكم الله عني كل خير

#2

وعليكم السلام ورحمة الله

استخدم العنصر JTextArea

وعند إضافة النص قم باستخدام الدالة

JTextArea.append(String)

لكي تحافظ على النص القديم الموجود بداخلها

#3

لا أوافقك الرأي أخ ياسر ...

استخدامك للـ JTextArea يخسرك إمكانية تنسيق النص Styling

وهذا غير جيد خاصة في برنامج محادثة

الطريقة السيئة للقيام بذلك هي:

JTextPane_nom.setText(JTextPane_nom.getText() + "Hello !");

والطريقة الأفضل هي إضافة طريقة كهذه :

    public boolean appentText(String text) {
        int l = jTextPane.getDocument().getLength();

        jTextPane.setCaretPosition(l);
        jTextPane.replaceSelection(text);

        try {
            Rectangle r = jTextPane.modelToView(l);
            if (r != null) {
                jTextPane.scrollRectToVisible(r);
            }
        } catch (BadLocationException e) {
            System.out.println("Error : Couldn't scroll : " + e.getMessage());
            e.printStackTrace();
            return false;
        }

        return true;
    }

سلام

1
#4

شكرا لكم اخواني وجاري المحاولة...

#5

بداية أخي intel3000

الكلمات إما بالعربية أو بالإنجليزية رجاءاً لا تكتب الكلمات الإنجليزية بالأحرف العربية

هل أمكن لو تكلمنا عن هذه النقطة أكثر أخي Speed_Of_Light؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#6

بالطبع يمكن :lol:

أي نقطة بالضبط ؟

الفكرة هي إضافة النص الممر للطريقة appentText في نهاية النص الموجود في الـ jTextPane (حيث الـ jTextPane هي عبرة عن غرض من الصف JTextPane )

هنا نقوم تخزين طول المستند في l:

        int l = jTextPane.getDocument().getLength();

ضبط مؤشر لوحة المفاتيح إلى نهاية المستند

        jTextPane.setCaretPosition(l);

استبدال النص المحدد بالنص text وبما أنه لا يوجد نص محدد سيتم إدراج هذا النص في مكان المؤشر

هذا اقتباس من الـ java doc لهذه الطريقة:

اقتباس
If there is no selection this amounts to an insert of the given text.

        jTextPane.replaceSelection(text);

أما إذا كنت تسأل عن الكتلة ضمن try و catch فهي تقوم بإيجاد إحداثيات الموقع الممر وتعيده على شكل مستطيل، ثم تحاول عرض هذه المنطقة بالطريقة scrollRectToVisible

ملاحظة: اكتشفت أن هذه الكتلة غير ضرورية هنا لأن الـ setCaretPosition تقوم بنفس العملية ! :P

أي يمكن الاكتفاء بهذا الكود: :blush:

    public void appentText(String text) {
        int l = jTextPane.getDocument().getLength();
        jTextPane.setCaretPosition(l);
        jTextPane.replaceSelection(text);
    }
1
#7

ما فائدة هذه القطعة من الشيفرة بغض النظر عن كونك استخدمتها هنا أو لم تستخدمها؟

            Rectangle r = jTextPane.modelToView(l);
            if (r != null) {
                jTextPane.scrollRectToVisible(r);
            }

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#8

هذا السطر يقوم بتحصيل إحداثيات الموقع الممر من المستند

Rectangle r = jTextPane.modelToView(l);

لنفرض أنه لدينا jTextPane (موضوعة على JScrollPane) ارتفاعها الحقيقي 100 بكسل

وفيها بضع صفحات من الكتابات لو مددناها (أي ألغينا الـ Scroll) لأصبح ارتفاعها 1000 بكسل

تمام ؟

الآن إذا نادينا على الطريقة modelToView ومررنا لها طول المستند (أي آخر موقع فيه) سيعيد مستطيل بحيث يكون:

إحداثياته الأفقية حسب موضع الحرف

إحداثياته العمودية 1000

طوله بطول نفس ارتفاع السطرالواحد

عرضه 0

ما فائدة هذا المستطيل العجيب ؟

سنقوم بتمريره إلى الطريقة scrollRectToVisible وهي المسؤولة عن تحريك الـ Scroll بحيث يمكن عرض هذا المستطيل

أي بكلام آخر سيتم تحريك الـ Scroll بحيث يتم عرض الموقع من المستند الذي مررناه إلى الطريقة modelToView

أي سيتم الذهاب إلى نهاية المستند

أتمنى أن تكون الفكرة وصلت

1
#9

بمعنى آخر فهذه الدالة تضمت أن يبقى العرض (TextArea) في نفس المكان الذي يتم عليه التعديل

هل فهمي صحيح؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#10

نعم يمكنك قول ذلك

لكن كما ذكرت لك، الدالة setCaretPosition وحدها تكفي في هذه الحالة

لأنها تقوم بنقل مؤشر الكتابة وتحريك الـ Scroll بحيث يكون مرئياً

#11

بدلا من فتح موضوع جديد

حبيبت ان اضع سؤالى هنا

فى برنامجى كنت استخدمت textArea و استبدلته ب TextPane لكونه افضل فى دعم تنسيق الخط سؤالى

اريد عندما يبدا المستخدم فى الكتابة داخله ان يكون للخط خصائص معينة من حيث حجم الخط و نوعه دون الحاجة لان يحدده المستخدم

اى ان يكون خصائص الخطdefault

ز اتمنى ان تعرفونى على المزيد من ال methods الخاصة بهذا العنصر

ملحوظة:::

ضرورى جداااااا محتاجة الرد بسرعة

شكراا مقدما

00020309t.gif

1958_1963.gif
#13

شكرا اخى.... :wub:

00020309t.gif

1958_1963.gif
#14

السلام عليكم ورحمة الله وبركاته

كيف يمكن اظهار الصور في الكائن JTextArea

#15

لا يمكن

عليك استخدام JTextPane

#16

كيف يمكن اظهار الصور في الكائن JTextPane ياخي Speed_Of_Light

وعندي سؤال اخر وهو اننا في لغة c و c++ نستخدم التعليمة goto للقفز الى مكان اخر في البرنامج .اتساءل ماهو مقابل هذه التعليمة في لغة الجافا وشكرا لكم

تم تعديل هذه المشاركة بواسطة intel3000 في 29 أبريل 2010 في 20:21

#17

لا وجود لهذه التعليمة في جافا يمكنك استخدام الدوال ومناداتها

أو استخدام التكرارات مع break و continue

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#18

هل يمكن اخ علاء ان تشرح لي كيفية نعمل ذلك بالـ break و continue

#19

ببساطة لا يمكن أن تقوم بعملها بجافا مئة بالمئة

لكن الوضع كالتالي

لو كنت في تكرار ما وأردت أن تقوم بالقفز إلى أول التكرار loop استخدم continue

ولوكنت في تكرار وتريد القفز إلى خارج التكرار استخدم break

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#20

شكرا اخي غلاء على التوضيح وسوف احوال تطبيقه شكرا

مواضيع مشابهة