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

كتابة أرقام عربية داخل JTextField

بدأه Eng.Fouad في 24 يونيو 2011 · 5 رد · 626 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

حاولت أن أقوم باستبدال الأرقام المدخلة على JTextField بأرقام عربية عن طريق استخدام الـ DocumentListener، كما هو موضح بالشفرة التالية:

    txtName.getDocument().addDocumentListener(this);

    ...

    public void insertUpdate(DocumentEvent e){setLabel();}
    public void removeUpdate(DocumentEvent e){setLabel();}
    public void changedUpdate(DocumentEvent e){}

    public void setLabel()
    {
        String s = txtName.getText();

        s = s.replace('0','\u0660');
        s = s.replace('1','\u0661');
        s = s.replace('2','\u0662');
        s = s.replace('3','\u0663');
        s = s.replace('4','\u0664');
        s = s.replace('5','\u0665');
        s = s.replace('6','\u0666');
        s = s.replace('7','\u0667');
        s = s.replace('8','\u0668');
        s = s.replace('9','\u0669');
        s = s.replace('.',',');

        txtName.setText(s);
    }

ولكن يظهر لي خطأ عند السطر التالي:

txtName.setText(s);

وهذا هو الخطأ:

Exception occurred during event dispatching:
java.lang.IllegalStateException: Attempt to mutate in notification

تم تعديل هذه المشاركة بواسطة Eng.Fouad في 24 يونيو 2011 في 18:40

597657.png
#2

ممكن تحط الكود كامل اذا كان طولة معقول

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#3

تمكنت من حل المشكلة والحمد لله، ولتعم الفائدة .. سأضع الشفرة هنا:

import javax.swing.*;   
import javax.swing.text.*;   

public class ArabicNumberFilter extends DocumentFilter
{
    public void insertString(DocumentFilter.FilterBypass fb, int offset,   
    String text, AttributeSet attr) throws BadLocationException
    {   
        fb.insertString(offset, adjustLabel(text), attr);   
    }    

    public void replace(DocumentFilter.FilterBypass fb, int offset, int length,   
    String text, AttributeSet attr) throws BadLocationException
    {
        fb.replace(offset, length, adjustLabel(text), attr);   
    }  

    public String adjustLabel(String s)
    {
        s = s.replace('0','\u0660');
        s = s.replace('1','\u0661');
        s = s.replace('2','\u0662');
        s = s.replace('3','\u0663');
        s = s.replace('4','\u0664');
        s = s.replace('5','\u0665');
        s = s.replace('6','\u0666');
        s = s.replace('7','\u0667');
        s = s.replace('8','\u0668');
        s = s.replace('9','\u0669');
        s = s.replace('.',',');
        return s;
    }
}

وهنا طريقة الاستخدام:

JTextField txtName = new JTextField();
DocumentFilter dfilter = new ArabicNumberFilter();
((AbstractDocument)txtName.getDocument()).setDocumentFilter(dfilter);

تم تعديل هذه المشاركة بواسطة Eng.Fouad في 24 يونيو 2011 في 19:12

597657.png
#4

المفروض انك تعمل عملية التحويل فى Thread لوحدها

ثانيا اعتقد ان CaretListener احسن من الـ

DocumentListener

ثالثا محاوله حاولت اعملها ولكن لم تنجح المفروض انك بتغير الـ

Locale

الخاص بالـ JTextField

ولكنها لم تنجح

ابحث فيها ممكن توصل لطريقه

Software Developer
Mahmoudkelany.com


 

#5

تمام

طريقه جميله

حاولت ابسط لك طريقه التحويل

public String adjustLabel(String s) {
    	for (int i = 48; i < 58; i++) {
        	s = s.replace((char) i, (char) (1584 + i));
    	}
    	s = s.replace('.', ',');
    	return s;
	}

Software Developer
Mahmoudkelany.com


 

#6

كنوع من الدعاية والاعلانات ممكن اكتب رابط المكتبة الخاصة بى والاخ علاء الصالحى للتعامل مع الارقام العربية

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

علاوة على التحويل من الارقام الانجليزية الى العربية والعكس

هذا رابط الموضوع

/index.php?showtopic=209213

واى استفسار او مساعدة انا والاخ علاء موجودين

اخيرا وجدت فرصة لاكتب اعلان عن المكتبة :)

"سيبونا ناخد فرصتنا بقى" هههههههههه

بالتوفيق

1


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…