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

دعم العربي في swing وجافا بشكل عام

بدأه docesam في 12 نوفمبر 2010 · 27 رد · 5,080 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

قمت بتركيب netbeans لغرض تجربة جافا وخاصة تجربة اللغة العربية مع جافا ، يوجد مع برنامج نتبينز بعض الأمثلة الجاهزة لبرامج صنعت بواسطة SWING . قمت بفتح إحداها وبالاستعانة بالله ثم بالجوجل استطعت تحويل اتجاه الكتابة ليصبح يدعم العربي (يمين يسار) في عدد من ال controls وذلك باستعمال الكود التالي :

	private void formComponentShown(java.awt.event.ComponentEvent evt) {
jTextField7.setComponentOrientation( ComponentOrientation.RIGHT_TO_LEFT );
jList1.setComponentOrientation( ComponentOrientation.RIGHT_TO_LEFT );
jTable1.setComponentOrientation( ComponentOrientation.RIGHT_TO_LEFT );

    	// TODO add your handling code here:
	}

لكن واجهتني مشكلة أن محتوى الخلايا في control ال jTable1 لا يظهر من اليمين لليسار إليكم صورة من الشاشة

20954720.jpg

تساؤلي هو :

1- هل يوجد حل لهذه المشكلة ؟

2- هل صحيح ما يشاع عن وجود مشاكل للجافا مع اللغة العربية في مختلف المجالات ؟ على سبيل المثال لا الحصر : قواعد البيانات ، الفرز ، المقارنة ، واجهة المستخدم (كالمثال المذكور بعاليه).

3- هل يمكن جعل النافذة الموضحة أعلاه من اليمين لليسار ؟ بمعنى أن تظهر كلمة Antenna إلى جهة اليمين ؟

ولكم جزيل الشكر

1
#2

بالنسبه لمشكله الجدول اعتقد انك لابد من تعمل الجدول بنفسك يعنى AbstractTable

انما بالنسبه للسوال التانى لم افهم ما قصدك بالفرز وقواعد البيانات ....

انما السوال الثالث لا يمنكك فعل ذلك

لان هذا عيب فى الـ SWING

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 12 نوفمبر 2010 في 14:14

Software Developer
Mahmoudkelany.com


 

#3

السلام عليكم

استخدم هذه الدالة مع JFrame

        myFrame.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);

لتغيير اتجاهه

- قم بتغيير myFrame باسم الـ Frame الخاص بك

#4
Ahmed SD كتب:

السلام عليكم

استخدم هذه الدالة مع JFrame

        myFrame.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);

لتغيير اتجاهه

- قم بتغيير myFrame باسم الـ Frame الخاص بك

وعليكم السلام

الاخ يسال عن تغيير اتجاه الـ title

المووجود فى الـ Frame

هل جربت ما قولته اخى الكريم ؟؟؟؟

Software Developer
Mahmoudkelany.com


 

#5
Mahmoud Kelany كتب:

بالنسبه لمشكله الجدول اعتقد انك لابد من تعمل الجدول بنفسك يعنى AbstractTable

انما بالنسبه للسوال التانى لم افهم ما قصدك بالفرز وقواعد البيانات ....

انما السوال الثالث لا يمنكك فعل ذلك

لان هذا عيب فى الـ SWING

أنا لا أعرف الجافا أبدا ، فلذلك لا أعرف ماذا تقصد بال AbstractTable ، لكن ربما تقصد أن أنشئ كلاس جدول من الصفر وأعمل فيه المميزات الي أريدها ؟

أو أني آخذ كلاس jTable وأعدل فيه مثلا ؟

بالنسبة للسؤال الثاني أقصد التالي:

تصور أنك محتاج كلاس وضيفته أنه يستقبل قائمة من المتغيرات النصية ويقوم بفرزها تصاعديا حسب الحروف الأبجدية. هل إذا وجدت في الإنترنت كلاس مثل هذا (ولكنه صمم ليعمل مع اللغة الإنجليزية) هل يسعمل بنفس الطريقة مع اللغة العربية ؟

وشكرا

#6

ايوه انك تعمل model من الاول خالص

بس طبعا مش هترسم الجدول

لا طبعا هتتحكم فيه اكتر

انما بالنسبه للسوال الخاص باللغه العربيه wacko.gifwacko.gif

بس اكيد تنفع

لكن ازاى لم اتعامل مع مثل ذلك من قبل

Software Developer
Mahmoudkelany.com


 

#7
Mahmoud Kelany كتب:

ايوه انك تعمل model من الاول خالص

بس طبعا مش هترسم الجدول

لا طبعا هتتحكم فيه اكتر

انما بالنسبه للسوال الخاص باللغه العربيه wacko.gifwacko.gif

بس اكيد تنفع

لكن ازاى لم اتعامل مع مثل ذلك من قبل

أخي الكريم : أرجو أن تطلع على هذه الصورة وتجيب على السؤال الذي يأتي بعدها

76619797.jpg

هل السي شارب أسهل من الجافا ؟

#8

ايوه فهمتك

الذى تريده هذا

يسمى بالـ TableRowSorter

ودا بيعمل ترتيب للصفوف حسب عمود معين

زى الصوره دى كدا

post-217802-065690800 1289580997_thumb.p

معموله بالجافا

موضوع السى شارب ولا الجافا

اولا انا مش اشتغلت الا قليل كدا سى شارب

بس اللى المفروض تعرفه ان السى شارب مأخوذ فكرتها من الجافا

لذلك هتلاقى حاجات كتير متشابه فى السى شارب والجافا

بالتوفيق

المرفقات
;kk;d.png

Software Developer
Mahmoudkelany.com


 

#9

لا توجد مشاكل في اللغة العربية حيث أن String أصلاً مبني بترميز الUnicode وبالتالي فالبحث والترتيب في النصوص العربية شيء عادي. ربما المشكلة الوحيدة هي تحويل عنوان النافذة من اليمين الى اليسار وربما لها حل..

بالنسبة للJTable فجميع الخلايا تكون في الوضع الافتراضي من جهه اليسار ويمكنك تغيير الCell Render للتتغير الطريقة وتحويلها مثلاً من اليمين أو الوسط:

استخدم الدالة:

public static void setTableAlignmentValue (JTable table, int index) {
        DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
        renderer.setHorizontalAlignment( JLabel.CENTER );
        table.getColumnModel().getColumn(index).setCellRenderer(renderer );
    }

وأرسل لها الجدول ورقم العمود الذي تريد وستقوم بتوسيط الخلايا في تلك العمود.

بالتوفيق،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#10

السلام عليكم

لو قمنابعمل

Custom Layout

وهذا رابط لبناء layout خاص بمشروعك

بصراحة لم أقم بالتجربة

http://download.oracle.com/javase/tutorial/uiswing/layout/custom.html

ربما تنجح التجربة

تحياتي اخبرني بالنتائج

وَعَبْدٌ قَدْ يَنامُ عَلَى حَرِيرٍ ××× وَذُو نَسَبٍ مَفَارِشُهُ التُّرَابُ

#11
EMNALI كتب:

السلام عليكم

لو قمنابعمل

Custom Layout

وهذا رابط لبناء layout خاص بمشروعك

بصراحة لم أقم بالتجربة

http://download.orac...out/custom.html

ربما تنجح التجربة

تحياتي اخبرني بالنتائج

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

ما الفائده من الـ Custom Layout

اخى الكريم ؟؟؟

ماذا سيفيد فى حالتنا هذه ؟

Software Developer
Mahmoudkelany.com


 

#12

يبدو ان أخطأت في موضوع الlayout

وطبعا شكرا الى الاخ Wajdy Essam الذي وضع البداية وانا استكملت الفكرة

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package examples;

/**
 *
 * @author ENGALI
 */

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * NewJFrame.java
 *
 * Created on Nov 13, 2010, 12:08:20 PM
 */



import java.awt.*;
import java.text.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;

/**
 *
 * @author ENGALI
 */
public class NewClass extends DefaultTableCellRenderer {





	//demo
	public static void main(String[] args) {
    	String   a = "EMN", b="علي";
    	Object[][] rowData = {{a, a, a, a},{b, b, b, b}};
    	Object[] columnNames = {"default renderer","center justified" ,"left justified", "right justified"};
    	TableModel model = new DefaultTableModel(rowData, columnNames);
    	JTable table = new JTable(model);
    	TableColumnModel tcm = table.getColumnModel();



    	NewClass r = new NewClass();
    	tcm.getColumn(0).setCellRenderer(r);

    	r = new NewClass();
    	r.setHorizontalAlignment(SwingConstants.CENTER);
    	tcm.getColumn(1).setCellRenderer(r);

    	r = new NewClass();
    	r.setHorizontalAlignment(SwingConstants.LEFT);
    	tcm.getColumn(2).setCellRenderer(r);

     	r = new NewClass();
    	r.setHorizontalAlignment(SwingConstants.RIGHT);
    	tcm.getColumn(3).setCellRenderer(r);

    	JFrame f = new JFrame("FormatRenderer");
    	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	f.getContentPane().add(new JScrollPane(table));
    	f.pack();
    	f.setLocationRelativeTo(null);
    	f.setVisible(true);
	}
}

والنتائج رائعة

1113100211481we8e8rshoo.png

تم تعديل هذه المشاركة بواسطة EMNALI في 13 نوفمبر 2010 في 14:01

وَعَبْدٌ قَدْ يَنامُ عَلَى حَرِيرٍ ××× وَذُو نَسَبٍ مَفَارِشُهُ التُّرَابُ

#13
EMNALI كتب:

يبدو ان أخطأت في موضوع الlayout

حصل خير :)

تمام كدا

Software Developer
Mahmoudkelany.com


 

#14

أشكركم على الردود

جربت الطريقة المذكورة في الأعلى وبالفعل نجحت ولكن جزئيا حيث أنه أثناء إدخالي للنص في الحقل تظهر الكتابة بدون دعم اتجاه اللغة من اليمين لليسار ، فإذا أردت مثلا كتابة "أسم" ثم "name" ثم "الشخص" تظهر بالشكل التالي أثناء إدخالها في الحقل :

70302169.jpg

مشكلة مثل هذه قد تصنع إرباك وخطأ أثناء إدخال نص مختلط في الحقل هذا بالإضافة إلى أنها تعطي انطباع للزبون بتدني جودة المنتج .

هل يوجد حل لهذه المشكلة ؟

مع الشكر

تم تعديل هذه المشاركة بواسطة docesam في 13 نوفمبر 2010 في 21:02

#15

توجد حلول لكل ما تريد، لكن في أغلب الأحيان عليك أن ترث JTable أو تعيد تعريف أحدى دوالها لكي تقوم بعمل الCustomization التي تريدها..

قم بجعل جدولك يعيد تعريف الدالة changeListener وهنا يمكنك تحويلها مسار المكون لحظة الكتابة..

أسهل طريقة في نت بينز، هي الضغط على الجدول بالزر الأيمن ثم اختيار Customize Code ثم غير الcombo الموجود في السطر الأول الى custom creation واضف الكود

{public void changeSelection(	int row, int column, boolean toggle, boolean extend)
    {
        super.changeSelection(row, column, toggle, extend);

        if (editCellAt(row, column))
        {
            Component editor = getEditorComponent();
            editor.requestFocusInWindow();
            editor.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        }
    }}

الشكل النهائي للانشاء الجدول سوف يكون:

jTable1 = new javax.swing.JTable(){public void changeSelection(	int row, int column, boolean toggle, boolean extend)
    {
        super.changeSelection(row, column, toggle, extend);

        if (editCellAt(row, column))
        {
            Component editor = getEditorComponent();
            editor.requestFocusInWindow();
            editor.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        }
    }}
    ;

الدالة requestFocusInWindow تجعل الخلية تستقبل الادخال بمجرد النقر عليها، والدالة التي تليها setComponentOrientation تجعل الادخال من اليمين الى اليسار.

بالتوفيق،

2

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#16

أشكرك على الرد المفيد جدا. لكن لا يبدو أن الجافا تشجع على البدء فيها أبدا ، فما تصنعه في الفجول ستوديو بكبسة زر يكلفك في الجافا الكثير من الوقت.

تم تعديل هذه المشاركة بواسطة docesam في 14 نوفمبر 2010 في 11:58

#17

إذا أردت أن تجرب شيء أسرع في جافا

جرب أن تستخدم ADF

تحياتي

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

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

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

728x90.png

#18
علاء الصالحي كتب:

إذا أردت أن تجرب شيء أسرع في جافا

جرب أن تستخدم ADF

تحياتي

شكرا لك على الرد

أنا أبحث عن JavaSE وليس JavaEE

#19
Wajdy Essam كتب:

توجد حلول لكل ما تريد، لكن في أغلب الأحيان عليك أن ترث JTable أو تعيد تعريف أحدى دوالها لكي تقوم بعمل الCustomization التي تريدها..

قم بجعل جدولك يعيد تعريف الدالة changeListener وهنا يمكنك تحويلها مسار المكون لحظة الكتابة..

أسهل طريقة في نت بينز، هي الضغط على الجدول بالزر الأيمن ثم اختيار Customize Code ثم غير الcombo الموجود في السطر الأول الى custom creation واضف الكود

{public void changeSelection(	int row, int column, boolean toggle, boolean extend)
    {
        super.changeSelection(row, column, toggle, extend);

        if (editCellAt(row, column))
        {
            Component editor = getEditorComponent();
            editor.requestFocusInWindow();
            editor.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        }
    }}

الشكل النهائي للانشاء الجدول سوف يكون:

jTable1 = new javax.swing.JTable(){public void changeSelection(	int row, int column, boolean toggle, boolean extend)
    {
        super.changeSelection(row, column, toggle, extend);

        if (editCellAt(row, column))
        {
            Component editor = getEditorComponent();
            editor.requestFocusInWindow();
            editor.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        }
    }}
    ;

الدالة requestFocusInWindow تجعل الخلية تستقبل الادخال بمجرد النقر عليها، والدالة التي تليها setComponentOrientation تجعل الادخال من اليمين الى اليسار.

بالتوفيق،

حاولت فعل ما ذكر أعلاه

customcreation.jpg

لكن لم أعرف أبن أضع الكود الذي وضعته أنت ، فالحقل المقابل ل"custom creation" لا يقبل إضافة إلا سطر واحد unsure.gif ، حاولت ضغط الكود الذي ذكرته في سطر واحد لكن تظهر رسالة خطأ أثناء التنفيذ smile.gif

#20

الصق الكود بعد القوسين مباشرة في نفس السطر وقبل الفاصلة.

تأكد من وجود :

import java.awt.Component ;

import java.awt.ComponentOrientation ;

اذا كان هناك خطأ فاعرض رسالة الخطأ.

بالتوفيق،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#21
Wajdy Essam كتب:

الصق الكود بعد القوسين مباشرة في نفس السطر وقبل الفاصلة.

تأكد من وجود :

import java.awt.Component ;

import java.awt.ComponentOrientation ;

اذا كان هناك خطأ فاعرض رسالة الخطأ.

بالتوفيق،

015.gif

100% طال عمرك

سؤال الله يسلمك: هل يوجد أي من مكونات SWING يوجد فيها مشاكل في اللغة العربية غير قابلة للحل ؟

أنظر إلى هذه الصورة smile.gif

customcreation.jpg

الله يرحم والديك لو في أي شي- أو أي شي مانت متأكد منه - تقول الآن قبل ما أبدأ أتعلم اللغة smile.gif .إلى الآن المشكلة المذكورة بعاليه (عنوان النافذة يظهر إلى اليسار) وهذا يمكن التحاليل عليه.

شئ آخر تريد أن تذكره لي ؟

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

وشكرا مقدما

تم تعديل هذه المشاركة بواسطة docesam في 15 نوفمبر 2010 في 12:47

#22

لم أجرب التعامل باللغه العربية مع جميع المكونات، ونظرياً لا أتوقع وجود مشاكل فيها (لدعم الينوكود في اللغه + تصميم المكتبة والذي يسمح لك باضافة الخصائص التي تريدها عند الوراثه من الكائن) وعملياً سوف تتأكد منها عند بدئك للبرمجة :).

بالتوفيق،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#23

من قال لك بأن ADF تعمل على JavaEE فقط؟

تحياتي

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

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

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

728x90.png

#24
Wajdy Essam كتب:

لم أجرب التعامل باللغه العربية مع جميع المكونات، ونظرياً لا أتوقع وجود مشاكل فيها (لدعم الينوكود في اللغه + تصميم المكتبة والذي يسمح لك باضافة الخصائص التي تريدها عند الوراثه من الكائن) وعملياً سوف تتأكد منها عند بدئك للبرمجة :).

بالتوفيق،

:)

أفترض أنك تمتلك من الخبرة (عدد البرامج التي برمجتها) ما يكفي لأفترض أن احتمال أن أتورط في مشكلة في اللغة العربية ضئيل للغاية.

علاء الصالحي كتب:

من قال لك بأن ADF تعمل على JavaEE فقط؟

تحياتي

قمت بالبحث في جوجل وفي الواقع عدد الوصلات المفيدة التي حصلت عليها كان قليل جدا أهمها وصلة لموقع أوراكل وفيها بعض الفيديوهات التوضيجية التي كانت تتكلم عن javaEE وكأنها هو محور ADF الوحيد.

اقتباس من موقع أوراكل

Oracle ADF is an end-to-end Java EE framework that simplifies  application development by providing out of the box infrastructure  services and a visual and declarative development experience.

http://www.oracle.com/technetwork/developer-tools/adf/overview/index.html

تم تعديل هذه المشاركة بواسطة docesam في 15 نوفمبر 2010 في 19:28

#25

اطلع على هذه الوصلة

http://download.oracle.com/docs/cd/E14571_01/core.1111/e10106/adf.htm

بالأخص هذا الشكل

http://download.oracle.com/docs/cd/E14571_01/core.1111/e10106/img/adfsimple.gif

تحياتي

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

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

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

728x90.png

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