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

اداه لتحرير ملفات Properties

رائج
بدأه العيافـي في 24 أبريل 2010 · 73 رد · 15,725 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#26

جميل اخى عيافى :)

ممكن تضع الكود بعد التعديل ؟؟

Software Developer
Mahmoudkelany.com


 

#27

عزيزي محمود

الكود موجود في ملف الجار .

#28
العيافـي كتب:

عزيزي محمود

الكود موجود في ملف الجار .

انا فاهم بس هيتعبنا شويه

لكن ماشى هاجيبه ان شاء الله :)

شكرا اخى عيافى

والى مزيد من التقدم باذن الله :)

Software Developer
Mahmoudkelany.com


 

#29

الحزمة

org.othman.objects.control

تحتوي على صنفين

filesListener : هذه الواجهه ينفذها الصنف الذي يريد معرفة التغيرات في قائمة ملفات properties من اضافة ملف وحذف ملف.

control : وهو اهم صنف في البرنامج حيث يحتوي على قائمة اصناف filesListener . ويحتوي على طريقتين (addFile + removeFile) واستخدمها من اي مكان في البرنامج لاضافة او حذف الملفات وعند تنفيذ احد هاتين الطريقتين فانه يقوم باستدعاء الطرق في قائمة الاصناف المسجله في المتغير (ArrayList<FilesListener> filesListeners)

الحزمة

org.othman.objects

تحتوي على الصنفين XMLBean + Setting

وظيفتها حفظ اعدادات البرنامج قبل اغلاق JFrame

سبق وكتبت عنها على هذا الرابط /index.php?showtopic=220167

الحزمة

org.othman.objects.properties

لم استخدم الصنف java.util.Properties مباشره بسبب انه عند فتح ملف خصائص فانه لا يحفظ ترتيب keys كما هو في الملف.

لذلك اضطريت استخدام الصنفين IteratorEnumeration + LinkedProperties (وجدها في النت وليست من تصميمي)

ويحتوي على الصنف OProperties و هو يرث الصنف LinkedProperties .

كما يحتوي على الصنف ResourseFiles و وظيفته استقبال ملفات الخصائص و التحكم في keys .

يتبع

تم تعديل هذه المشاركة بواسطة العيافـي في 2 ديسمبر 2010 في 07:45

#30

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

لكن لدى طلب بعد اذنك طبعا :)

ممكن تشرح كيفيه وضع الصوره على الـ TextFiled

يعنى ازاى اتعملت هذه ؟؟

لانى لحد دلوقتى مش فاهمها خالص

وشكرا مقدما :)

Software Developer
Mahmoudkelany.com


 

#31

استخدمت الطريقة paintIcon لعرض الصوره في المكان الذي ارغب في عرض الصوره فيه، وهي موجوده في الواجهه Icon

http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/Icon.html#paintIcon%28java.awt.Component,%20java.awt.Graphics,%20int,%20int%29

ثم قمت باستخدام الطريقه getMargin لاضافة مسافة بين مكان بدايه النص و الحدود للكائن JTextField

http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/text/JTextComponent.html#getMargin%28%29

هذا كل ما في الامر

تم تعديل هذه المشاركة بواسطة العيافـي في 2 ديسمبر 2010 في 21:48

#32

الحزمة

org.othman.components.popup

هي حزمة ترث JPopupMenu و JMenuItem وتعمل عملها.

الحزمة

org.othman.components.button

تحتوي على صنف PopupButton ويرث الكائن JButton ، الهدف منه هو عرض النافذه المنبثقه في الحزمة السابقة عند الضغط علي الزر.

الحزمة

org.othman.components.field

في الحقيقة انها Jpanel لتكوين كائن بالشكل التالي

post-82434-069889000 1291315941_thumb.gi

الحزمة

org.othman.panels

تحتوي على

SubConvertPanel & ConvertPanel وهي واجهت التحويل بين الحروف العربيه و اليونيكود

اما EditorPanel : فهي الواجهه الرئيسية حيث تحتوي على

FileChooserPanel

post-82434-017168000 1291315879_thumb.gi

FieldsPanel

post-82434-038234100 1291315900_thumb.gi

ButtonsPanel

post-82434-093082700 1291315911_thumb.gi

TablePanel

post-82434-012590900 1291315926_thumb.gi

هذا بالنسبة لترتيب البرنامج

اما بالنسبه لشفره فلم استخدم اكواد غريبه فاعتقد بان الاوامر المستخدم يعرفها الجميع.

المرفقات
FileChooserPanel.gifFieldsPanel.gifButtonsPanel.gifTablePanel.gifValueField.gif
#33

جزاكم الله خيرا اخى عيافى

وجارى النظر على ذلك

وشكرا لك كثيرا :)

الى مزيد من التقدم باذن الله

Software Developer
Mahmoudkelany.com


 

#34

اشكرك على اهتمامك.

قمت باضافة نسخة لتشغيلها من netbeans

#35

تمام

شكرا اخى عيافى

بس بصراحه انا عندى سوال

معلش تحملنى

هو سوال عادى

private static final long serialVersionUID = 1L;

كل ما اشوف اى جزيئه فالكود الاقى دى يعنى ايه

هل دى للكومبيلر ولا ايه الفائده ؟؟؟

بجد انا اتعلمت كتير منك

وجزاك الله كل خير

لن انسى لك هذا استاذى الكبير

وشكرا لك :)

Software Developer
Mahmoudkelany.com


 

#37

جزاكم الله خيرا

جارى القراءه وفهم المقصود :)

اصل انا عندى امتحانات

وربنا يسترها mad.gifmad.gif

Software Developer
Mahmoudkelany.com


 

#38

حاولت افهمها ولكن دون جدوى من اهميتها

لكن لاحظت انه ذكر ان المترجم يقوم بحسابها ان لم اكتبها

ولكن ما الفائده اذن من كتابتها ؟؟

وايضا لاحظت انه لازم تقريبا يكون نفس الرقم لكل الكلاسسز فى البرنامج كله

يعنى مثلا انا عملت رقم 4L فى كلاس

ورقم 1L فى كلاس تانيه

هل هيعطينى خطأ؟

ارجوا التوضيح :)

Software Developer
Mahmoudkelany.com


 

#39

كل فئة من النوع Serialize لها معرف

هذا المعرف يساعد المترجم على التفرقة ما بين الإصدارات المختلفة من نفس الفئة

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

ثم قمت بتغيير هذه الفئة على الخادم هنا سيكون رقم الفئة الجديد مخالف لمعرف الفئة القديم

ولهذا لن يعمل البرنامج وسيعلم أن الفئة الموجودة لدى العميل قديمة

على كل يفضل أن تكتب أنت هذا المعرف

لأنك إن لم تفعل فسيقوم المترجم بتوليد رقم جديد عند كل عملية ترجمة وبهذا سيختلف الإصدار دائماً

مما يعني أن العميل سيواجه مشكلة حتى لو لم تختلف نسخة الفئة بشكل حقيقي

بالنسبة للموضوع الأساسي ألا وهو المشروع

هل يمكن توفير نسخة من المشروع على أساس eclipse project؟

تحياتي

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

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

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

728x90.png

#40

الكود المصدر للمشروع على الاكليبس

propertieseditor.rar

#41

السلام عليكم

أنا أطلع على الشيفرة الخاصة بك

ماشاء الله شيء مرتب جداً

في البداية لماذا وضعت الثوابت الخاصة بك في فئة ثوابت أليس سيكون أفضل للبرنامج لو كان في ملف Properties؟

هل هناك فائدة ما ستجنيها من ذلك؟

لاحظت أيضاً أنك استخدمت الجملة التالية

String.format("%s%s",Constants.IMAGES_PATH,"loader.gif")

فعلياً هذه الجملة قامت بعملية الصاق concatenation للعبارتين

فلماذا لم تكتفي باستخدام + أو حتى الدالة Contact

لم أنتهي بعد من الشيفرة أنا أقرأها بالتفصيل وأكتب لك كلما استغربت شيء أو لم أفهم شيء

لاحظ أني أسأل فعاملني على أني طالب علم غلبان :)

تحياتي

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

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

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

728x90.png

#42

عزيزي علاء

بالنسبة لاستخدام ملف properties فقد قمت بانشاء صنف وملفات الخصائص في الحزمة org.othman.resource لانقل النصوص هناك BROWSE="Browse" وغيرها ولكن لم يسعفني الوقت لا نشغالي ، خلال هذه الفتره.

اما بالنسبة لاستخدام String.format فهي احد الخيات المتاحة لالصاق النصوص ، التي تبعدني من لخبطه دمج النصوص باستخدام علامة (+).

اعني بانه ليس هناك سبب معي فهي كلها تأدي نفس الغرض ، و لكني انزعج من طريقة دمج النصوص باستخدام علامة + .

سرني كثيرا قرائتك للشفره ..

#43

مممممممممممممم

لكنها تقوم ببناء كائن من Formatter على كل لست متأكد من كونها أفضل من StringBuilder

يبقى الموضوع قائم ربما لو استخدمت contact كان أفضل لك لأنها تبني String فقط فهي لا تبني سوى String جديد فقط

لم أنتهي من قراءة الشيفرة لكني لمحت هذه في عجالة

سأكملها بإذن الله في أقرب فرصة

تحياتي

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

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

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

728x90.png

#44

بعد تحديث التجربه

بعد تجرب بسيطه وصلت الى ان Format هي اسوء اختيار

النتيجة

String-concat	: 32	9005424
String(+)	: 14	8120056
StringBuilder	: 40	10481752
Format		: 435	11979984

شفره التجربة

package org.othman.test;


public class Test {

	static int LENGTH=100000; 

	public static void main(String[] args) {
//		testConcat();
		testString();
//		testStringBuilder();
//		testFormat();
	}



	public static void testConcat(){	
		StringBuffer stringBuffer=new StringBuffer();
	    long memory=Runtime.getRuntime().freeMemory();
		long time=System.currentTimeMillis();

		for (int i = 0; i < LENGTH; i++) {
			String str="Test ".concat(" aaa").concat(" bbbb");
			stringBuffer.append(str);
		}

		long timeAfterFor=System.currentTimeMillis() - time;
		long memoryAfterFor=memory-Runtime.getRuntime().freeMemory();

		System.out.println("String-concat\t: " + timeAfterFor +"\t"+memoryAfterFor);
	}

	public static void testString(){
		StringBuffer stringBuffer=new StringBuffer();
	    long memory=Runtime.getRuntime().freeMemory();
		long time=System.currentTimeMillis();

		for (int i = 0; i < LENGTH; i++) {
			String str="Test "+" aaa" + " bbbb";
			stringBuffer.append(str);
		}

		long timeAfterFor=System.currentTimeMillis() - time;
		long memoryAfterFor=memory-Runtime.getRuntime().freeMemory();

		System.out.println("String(+)\t\t: " + timeAfterFor +"\t"+memoryAfterFor);
	}
	public static void testStringBuilder(){
		StringBuffer stringBuffer=new StringBuffer();
	    long memory=Runtime.getRuntime().freeMemory();
		long time=System.currentTimeMillis();

		for (int i = 0; i < LENGTH; i++) {
			StringBuilder sb=new StringBuilder().append("Test").append(" aaa").append(" bbbb");
			stringBuffer.append(sb);
		}

		long timeAfterFor=System.currentTimeMillis() - time;
		long memoryAfterFor=memory-Runtime.getRuntime().freeMemory();

		System.out.println("StringBuilder\t: " + timeAfterFor +"\t"+memoryAfterFor);
	}

	public static void testFormat(){
		StringBuffer stringBuffer=new StringBuffer();
	    long memory=Runtime.getRuntime().freeMemory();
		long time=System.currentTimeMillis();

		for (int i = 0; i < LENGTH; i++) {
			String str=String.format("Test %s %s", " aaa", " bbbb");
			stringBuffer.append(str);
		}

		long timeAfterFor=System.currentTimeMillis() - time;
		long memoryAfterFor=memory-Runtime.getRuntime().freeMemory();

		System.out.println("Format\t\t: " + timeAfterFor +"\t"+memoryAfterFor);

	}

}

تم تعديل هذه المشاركة بواسطة العيافـي في 12 ديسمبر 2010 في 10:25

1
#45

قمت بالتجربه مره اخرى

الهدف هو انشاء نص "Test aaa bbbb" بعدد 100000 مره

#46

أداة رائعة بصراحه , يعطيك العافيه أخي العزيز

بس ممكن تقول لي وين تحتفظ بالمعلومات الأخيره عند إغلاق الفورم لأني لاحظت أنه ماينشئ أي ملف عند إغلاقه!!

هل تكتبها في الريجيستري؟ ولا تنشئ ملف في مجلد النظام؟

أما لوكنت تحفظها في ملف داخل الجار نفسه فهذه قوية وهذا الذي اريد ان اتأكد منه :)

مشكور أخي العزيز


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#47
M.Allaw كتب:

أداة رائعة بصراحه , يعطيك العافيه أخي العزيز

بس ممكن تقول لي وين تحتفظ بالمعلومات الأخيره عند إغلاق الفورم لأني لاحظت أنه ماينشئ أي ملف عند إغلاقه!!

هل تكتبها في الريجيستري؟ ولا تنشئ ملف في مجلد النظام؟

أما لوكنت تحفظها في ملف داخل الجار نفسه فهذه قوية وهذا الذي اريد ان اتأكد منه :)

مشكور أخي العزيز

الحزمة

org.othman.objects

تحتوي على الصنفين XMLBean + Setting

وظيفتها حفظ اعدادات البرنامج قبل اغلاق JFrame

سبق وكتبت عنها على هذا الرابط /index.php?showtopic=220167

اما بالنسبه لكتابه داخل ملف الجار , فلا اعتقد انه بالامكان كتابه او التعديل على ملف الجار من نفس ملف الجار.

اما اذا كنت تريد التعديل من ملف جار آخر يمكنك استخدام الامر التاليه

jar uf jar-file input-file(s)
2
#48
العيافـي كتب:

اما اذا كنت تريد التعديل من ملف جار آخر يمكنك استخدام الامر التاليه

jar uf jar-file input-file(s)

ممكن توضح ذلك اخى عثمان ؟

لان مش فاهم ازاى استخدمه وفين ؟

لو مثال يكون افضل

وجزاكم الله كل الخير:)

Software Developer
Mahmoudkelany.com


 

#49

فهمت فكرتك وحملت الحزمه , بس أقصد انت الآن وين تنشئ ملف الـXML اللي تحفظ داخله الأعدادات?

وين أستعمل الأمر هذا؟ وكيف أعدل من ملف جار آخر؟

وإذا كان بإمكاني التعديل في ملف جار آخر إذن أستطيع أن أعدل في نفس الجار, أليس كذلك؟

طيب هل ممكن تسوي Extract لملف من الجار وتكتب داخله وترجع تضمنه لنفس الجار ؟

معلش حبيبي لو تعبتك معي بس من جد يهمني هذا الموضوع جداً وجزاك الله خير :)

تم تعديل هذه المشاركة بواسطة M.Allaw في 14 ديسمبر 2010 في 10:11


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#50
M.Allaw كتب:

فهمت فكرتك وحملت الحزمه , بس أقصد انت الآن وين تنشئ ملف الـXML اللي تحفظ داخله الأعدادات?

ردا على سوالك الاول

public static final String USER_HOME = System.getProperty("user.home");
	public static final File DEFAULT_NAME = new File(USER_HOME, "EditProperties_v4.xml");

هتلاقى دا داخل الـ XMLBean class

انما باقى الاسئله منتظر الاجابه مثلك:)

Software Developer
Mahmoudkelany.com


 

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