اداه لتحرير ملفات Properties
عزيزي محمود
الكود موجود في ملف الجار .
العيافـي كتب:عزيزي محمود
الكود موجود في ملف الجار .
انا فاهم بس هيتعبنا شويه
لكن ماشى هاجيبه ان شاء الله :)
شكرا اخى عيافى
والى مزيد من التقدم باذن الله :)
الحزمة
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
جزاكم الله خيرا اخى عثمان
لكن لدى طلب بعد اذنك طبعا :)
ممكن تشرح كيفيه وضع الصوره على الـ TextFiled
يعنى ازاى اتعملت هذه ؟؟
لانى لحد دلوقتى مش فاهمها خالص
وشكرا مقدما :)
استخدمت الطريقة paintIcon لعرض الصوره في المكان الذي ارغب في عرض الصوره فيه، وهي موجوده في الواجهه Icon
ثم قمت باستخدام الطريقه getMargin لاضافة مسافة بين مكان بدايه النص و الحدود للكائن JTextField
هذا كل ما في الامر
تم تعديل هذه المشاركة بواسطة العيافـي في 2 ديسمبر 2010 في 21:48
الحزمة
org.othman.components.popup
هي حزمة ترث JPopupMenu و JMenuItem وتعمل عملها.
الحزمة
org.othman.components.button
تحتوي على صنف PopupButton ويرث الكائن JButton ، الهدف منه هو عرض النافذه المنبثقه في الحزمة السابقة عند الضغط علي الزر.
الحزمة
org.othman.components.field
في الحقيقة انها Jpanel لتكوين كائن بالشكل التالي
الحزمة
org.othman.panels
تحتوي على
SubConvertPanel & ConvertPanel وهي واجهت التحويل بين الحروف العربيه و اليونيكود
اما EditorPanel : فهي الواجهه الرئيسية حيث تحتوي على
FileChooserPanel
FieldsPanel
ButtonsPanel
TablePanel
هذا بالنسبة لترتيب البرنامج
اما بالنسبه لشفره فلم استخدم اكواد غريبه فاعتقد بان الاوامر المستخدم يعرفها الجميع.
جزاكم الله خيرا اخى عيافى
وجارى النظر على ذلك
وشكرا لك كثيرا :)
الى مزيد من التقدم باذن الله
اشكرك على اهتمامك.
قمت باضافة نسخة لتشغيلها من netbeans
تمام
شكرا اخى عيافى
بس بصراحه انا عندى سوال
معلش تحملنى
هو سوال عادى
private static final long serialVersionUID = 1L;
كل ما اشوف اى جزيئه فالكود الاقى دى يعنى ايه
هل دى للكومبيلر ولا ايه الفائده ؟؟؟
بجد انا اتعلمت كتير منك
وجزاك الله كل خير
لن انسى لك هذا استاذى الكبير
وشكرا لك :)
جزاكم الله خيرا
جارى القراءه وفهم المقصود :)
اصل انا عندى امتحانات
وربنا يسترها ![]()
![]()
حاولت افهمها ولكن دون جدوى من اهميتها
لكن لاحظت انه ذكر ان المترجم يقوم بحسابها ان لم اكتبها
ولكن ما الفائده اذن من كتابتها ؟؟
وايضا لاحظت انه لازم تقريبا يكون نفس الرقم لكل الكلاسسز فى البرنامج كله
يعنى مثلا انا عملت رقم 4L فى كلاس
ورقم 1L فى كلاس تانيه
هل هيعطينى خطأ؟
ارجوا التوضيح :)
كل فئة من النوع Serialize لها معرف
هذا المعرف يساعد المترجم على التفرقة ما بين الإصدارات المختلفة من نفس الفئة
خذ مثلاً لو كنت تعمل على فئة اسمها طالب ووضعتها في برنامج عند العميل
ثم قمت بتغيير هذه الفئة على الخادم هنا سيكون رقم الفئة الجديد مخالف لمعرف الفئة القديم
ولهذا لن يعمل البرنامج وسيعلم أن الفئة الموجودة لدى العميل قديمة
على كل يفضل أن تكتب أنت هذا المعرف
لأنك إن لم تفعل فسيقوم المترجم بتوليد رقم جديد عند كل عملية ترجمة وبهذا سيختلف الإصدار دائماً
مما يعني أن العميل سيواجه مشكلة حتى لو لم تختلف نسخة الفئة بشكل حقيقي
بالنسبة للموضوع الأساسي ألا وهو المشروع
هل يمكن توفير نسخة من المشروع على أساس eclipse project؟
تحياتي
الكود المصدر للمشروع على الاكليبس
السلام عليكم
أنا أطلع على الشيفرة الخاصة بك
ماشاء الله شيء مرتب جداً
في البداية لماذا وضعت الثوابت الخاصة بك في فئة ثوابت أليس سيكون أفضل للبرنامج لو كان في ملف Properties؟
هل هناك فائدة ما ستجنيها من ذلك؟
لاحظت أيضاً أنك استخدمت الجملة التالية
String.format("%s%s",Constants.IMAGES_PATH,"loader.gif")فعلياً هذه الجملة قامت بعملية الصاق concatenation للعبارتين
فلماذا لم تكتفي باستخدام + أو حتى الدالة Contact
لم أنتهي بعد من الشيفرة أنا أقرأها بالتفصيل وأكتب لك كلما استغربت شيء أو لم أفهم شيء
لاحظ أني أسأل فعاملني على أني طالب علم غلبان :)
تحياتي
عزيزي علاء
بالنسبة لاستخدام ملف properties فقد قمت بانشاء صنف وملفات الخصائص في الحزمة org.othman.resource لانقل النصوص هناك BROWSE="Browse" وغيرها ولكن لم يسعفني الوقت لا نشغالي ، خلال هذه الفتره.
اما بالنسبة لاستخدام String.format فهي احد الخيات المتاحة لالصاق النصوص ، التي تبعدني من لخبطه دمج النصوص باستخدام علامة (+).
اعني بانه ليس هناك سبب معي فهي كلها تأدي نفس الغرض ، و لكني انزعج من طريقة دمج النصوص باستخدام علامة + .
سرني كثيرا قرائتك للشفره ..
مممممممممممممم
لكنها تقوم ببناء كائن من Formatter على كل لست متأكد من كونها أفضل من StringBuilder
يبقى الموضوع قائم ربما لو استخدمت contact كان أفضل لك لأنها تبني String فقط فهي لا تبني سوى String جديد فقط
لم أنتهي من قراءة الشيفرة لكني لمحت هذه في عجالة
سأكملها بإذن الله في أقرب فرصة
تحياتي
بعد تحديث التجربه
بعد تجرب بسيطه وصلت الى ان 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
قمت بالتجربه مره اخرى
الهدف هو انشاء نص "Test aaa bbbb" بعدد 100000 مره
أداة رائعة بصراحه , يعطيك العافيه أخي العزيز
بس ممكن تقول لي وين تحتفظ بالمعلومات الأخيره عند إغلاق الفورم لأني لاحظت أنه ماينشئ أي ملف عند إغلاقه!!
هل تكتبها في الريجيستري؟ ولا تنشئ ملف في مجلد النظام؟
أما لوكنت تحفظها في ملف داخل الجار نفسه فهذه قوية وهذا الذي اريد ان اتأكد منه :)
مشكور أخي العزيز
HeartOutputStream myHeart;
OutputStream myHeartOutStream;
myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);
while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");
M.Allaw كتب:أداة رائعة بصراحه , يعطيك العافيه أخي العزيز
بس ممكن تقول لي وين تحتفظ بالمعلومات الأخيره عند إغلاق الفورم لأني لاحظت أنه ماينشئ أي ملف عند إغلاقه!!
هل تكتبها في الريجيستري؟ ولا تنشئ ملف في مجلد النظام؟
أما لوكنت تحفظها في ملف داخل الجار نفسه فهذه قوية وهذا الذي اريد ان اتأكد منه :)
مشكور أخي العزيز
الحزمة
org.othman.objects
تحتوي على الصنفين XMLBean + Setting
وظيفتها حفظ اعدادات البرنامج قبل اغلاق JFrame
سبق وكتبت عنها على هذا الرابط /index.php?showtopic=220167
اما بالنسبه لكتابه داخل ملف الجار , فلا اعتقد انه بالامكان كتابه او التعديل على ملف الجار من نفس ملف الجار.
اما اذا كنت تريد التعديل من ملف جار آخر يمكنك استخدام الامر التاليه
jar uf jar-file input-file(s)
العيافـي كتب:اما اذا كنت تريد التعديل من ملف جار آخر يمكنك استخدام الامر التاليه
jar uf jar-file input-file(s)
ممكن توضح ذلك اخى عثمان ؟
لان مش فاهم ازاى استخدمه وفين ؟
لو مثال يكون افضل
وجزاكم الله كل الخير:)
فهمت فكرتك وحملت الحزمه , بس أقصد انت الآن وين تنشئ ملف الـ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");
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
انما باقى الاسئله منتظر الاجابه مثلك:)
