شرح تحديث شجرة الحسابات JTree من قاعدة البيانات
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: قواعد البيانات JAVA JDBC
صفحة 1 من اصل 1 • شاطر
شرح تحديث شجرة الحسابات JTree من قاعدة البيانات
السلام عليكم
هذه أول مشاركة لي في هذا المنتدى العظيم
وحيث أنني أستفدت الكثير وتعلمت الكثير من خلال الأفاضل الموجودين هنا أردت المساعدة في شرح جزء بحثت عنه لمدة ثلاثة أيام وتوصلت له اﻵن بعد عناء والحمد لله
يمكن أن يكون الكود ليس بالشكل اﻹحترافي حيث أنني مازلت مبتدئ إﻻ انه إن شاء الله سيفي بالغرض وسيوفر على كثيرين عناء البحث بدون جدوى
أسأل الله ان يجعله صدقة جارية ﻷمي
بسم الله نبدأ
شرح مختصر أوﻻً للمطلوب
عندي جدول بقاعدة البيانات يحتوي على أسماء الحسابات وأرقام الحسابات الرئيسية والفرعية بالشكل التالي:
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
وأريد أن أعرضها في شكل شجرة لتسهيل عرضها على المستخدم كما هو مبين بالشكل التالي:
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
سأبدأ أوﻻً في فكرة إنشاء الشجرة بدون قاعدة بيانات حتى يكون من اليسير فهم إضافة قاعدة البيانات بعد ذلك:
ﻹنشاء شجرة داخل جافا يجب أن يكون لدينا عقدة جذرية Root Node والتي سوف يتفرع منها بدورها عقد فرعية Children Nodes يمكنها أن تتفرع بعد ذلك إلى ما شاء الله

ﻹنشاء الشجرة نحتاج إلى إنشاء عقدة جذرية باﻷمر التالي
ثم ننشيء عقد فرعية من العقدة الجذرية بنفس الكود
ولكن كيف ستفهم جافا بالعلاقة بين العقدة الجذرية والفرعية؟؟
سنشرح لها بالطبع
ببساطة سنضيف العقدة الفرعية إلى الجذرية
ثم نضيف العقدة الجذرية إلى الشجرة باﻷمر التالي
وبعدها نظهر الشجرة إلى الشاشة
بالطبع ﻻ تنسى إستيرااد المكتبات التالية
يكون الناتج كالتالي
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
إذا أردت مثلا تفريع childOne سنتبع نفس الخطوات
تعريف الفرع
ثم إضافة الفرع اﻷخير إلى الفرع الذي أصبح أبوه اﻵن
يكون الناتج كالتالي
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
هذا شرح بسيط لنموذج الشجرة غير الديناميكي
أرجو أن يكون واضح للجميع
سوف أدرج اﻵن الكود الذي توصلت إليه مع وضع الشرح كتعليق على كل جزء وفي حالة وجود أي غموض بالموضوع فلا تتردد في السؤال
دعواتكم لي وﻷمي وأبي
هذه أول مشاركة لي في هذا المنتدى العظيم
وحيث أنني أستفدت الكثير وتعلمت الكثير من خلال الأفاضل الموجودين هنا أردت المساعدة في شرح جزء بحثت عنه لمدة ثلاثة أيام وتوصلت له اﻵن بعد عناء والحمد لله
يمكن أن يكون الكود ليس بالشكل اﻹحترافي حيث أنني مازلت مبتدئ إﻻ انه إن شاء الله سيفي بالغرض وسيوفر على كثيرين عناء البحث بدون جدوى
أسأل الله ان يجعله صدقة جارية ﻷمي
بسم الله نبدأ
شرح مختصر أوﻻً للمطلوب
عندي جدول بقاعدة البيانات يحتوي على أسماء الحسابات وأرقام الحسابات الرئيسية والفرعية بالشكل التالي:
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
وأريد أن أعرضها في شكل شجرة لتسهيل عرضها على المستخدم كما هو مبين بالشكل التالي:
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
سأبدأ أوﻻً في فكرة إنشاء الشجرة بدون قاعدة بيانات حتى يكون من اليسير فهم إضافة قاعدة البيانات بعد ذلك:
ﻹنشاء شجرة داخل جافا يجب أن يكون لدينا عقدة جذرية Root Node والتي سوف يتفرع منها بدورها عقد فرعية Children Nodes يمكنها أن تتفرع بعد ذلك إلى ما شاء الله

ﻹنشاء الشجرة نحتاج إلى إنشاء عقدة جذرية باﻷمر التالي
- الكود:
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("I'm Root");
ثم ننشيء عقد فرعية من العقدة الجذرية بنفس الكود
- الكود:
DefaultMutableTreeNode childOne = new DefaultMutableTreeNode("I'm a Child # One");
- الكود:
DefaultMutableTreeNode childTwo = new DefaultMutableTreeNode("I'm a Child # Two");
ولكن كيف ستفهم جافا بالعلاقة بين العقدة الجذرية والفرعية؟؟
سنشرح لها بالطبع
ببساطة سنضيف العقدة الفرعية إلى الجذرية
- الكود:
rootNode.add(childOne);
- الكود:
rootNode.add(childTwo);
ثم نضيف العقدة الجذرية إلى الشجرة باﻷمر التالي
- الكود:
DefaultTreeModel dtm = new DefaultTreeModel(rootNode);
وبعدها نظهر الشجرة إلى الشاشة
- الكود:
jTree1.setModel(dtm);
بالطبع ﻻ تنسى إستيرااد المكتبات التالية
- الكود:
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
يكون الناتج كالتالي
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
إذا أردت مثلا تفريع childOne سنتبع نفس الخطوات
تعريف الفرع
- الكود:
DefaultMutableTreeNode childOfchildOne = new DefaultMutableTreeNode("I'm a Child of Child One");
ثم إضافة الفرع اﻷخير إلى الفرع الذي أصبح أبوه اﻵن
- الكود:
childOne.add(childOfchildOne);
يكون الناتج كالتالي
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
هذا شرح بسيط لنموذج الشجرة غير الديناميكي
أرجو أن يكون واضح للجميع
سوف أدرج اﻵن الكود الذي توصلت إليه مع وضع الشرح كتعليق على كل جزء وفي حالة وجود أي غموض بالموضوع فلا تتردد في السؤال
دعواتكم لي وﻷمي وأبي
- الكود:
Connection con = null;
PreparedStatement pst = null;
ResultSet rs = null;
public AccountsJTree() {
initComponents();
con = DBConnection.iconnect();
this.fillTree();
}
public void fillTree(){
try {
String query = "Select accountNumber,accountName,higherAccount from MainAccounts";
pst = con.prepareStatement(query);
rs = pst.executeQuery();
int rowCount = 0; //سوف نستخدمه لمعرفة عدد النتائج او الصفوف في قاعدة البيانات
int i = 0; // سوف نستخدمه لمقارنة عمود الحساب اﻷب بعمود الحساب اﻷبن
int j = 0; // سوف نستخدمه لمقارنة عمود الحساب اﻷب بعمود الحساب اﻷبن
// الدوران لمعرفة عدد الصفوف
while(rs.next()){
rowCount++;
}
//بعد الدوران سيصبح مؤشر
//rs
//خالي لذا يجب أن نعيد اﻹستعلام
rs = pst.executeQuery();
//اوﻻ نعرف العقدة الرئيسية في الشجرة ونسميها شجرة الحسابات
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("شجرة الحسابات");
//المطلوب مننا ان نقارن عمود الحساب اﻷب برقم الحساب لقاعدة البيانات
//ولعمل لذلك ننشيء ثلاث مصفوفات
//المصفوفة الاولى تحتوي على جميع أرقام الحسابات
String[] nodeID = new String[rowCount];
//المصفوفة الثانية تحتوي على أرقام الحسابات اﻷب
String[] parentID = new String[rowCount];
//المصفوفة الثالثة تحتوي على العقدالفرعية و التي سيتم ربطها مع عقدة شجرة الحسابات الرئيسية
DefaultMutableTreeNode[] node = new DefaultMutableTreeNode[rowCount];
//نبدأ الدوران لتعبئة الشجرة
while(rs.next()){
//أوﻻ نعبئ الثلاث مصفوفات
node[i] = new DefaultMutableTreeNode(rs.getString("accountName"));
parentID[i] = rs.getString("higherAccount");
nodeID[i]= rs.getString("accountNumber");
//إذا كان الحساب اﻷب يساوي صفر أي انه يتبع مباشرة العقدة الجذرية
//rootNode
if(parentID[i].equals("0")){
rootNode.add(node[i]);
}
i++;
}
//أهم خطوة سوف نقارن كل رقم حساب بخانةالحساب اﻷعلى مع رقم الحساب اﻷصلي
// وذلك عن طريق دورانين
//في حال التساوي نلحق العقدة الفرعية بالعقدة اﻷب
for (i = 0; i < rowCount; i++) {
for (j = 0; j < rowCount; j++) {
if (!"0".equals(node[i]) && parentID[j].equals(nodeID[i])) {
node[i].add(node[j]);
}
}
}
//أخيرا نضيف العقدة الجذرية إلى الشجرة
DefaultTreeModel dtm = new DefaultTreeModel(rootNode);
//ثم نظهر الشجرة على الشاشة
jTree1.setModel(dtm);
} catch (SQLException ex) {
Logger.getLogger(AccountsJTree.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
pst.close();
rs.close();
} catch (SQLException ex) {
Logger.getLogger(AccountsJTree.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
tampolla- ..
- تاريخ التسجيل : 12/08/2015
المساهمات : 10
النقاط : 13
التقيم : 1
الدولة :
الجنس :
رد: شرح تحديث شجرة الحسابات JTree من قاعدة البيانات
جزاكم الله خيرا يا اخى
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ

NEXT- الادارة
- تاريخ التسجيل : 18/02/2011
المساهمات : 446
النقاط : 200660
التقيم : 28
الدولة :
الجنس :
رد: شرح تحديث شجرة الحسابات JTree من قاعدة البيانات
tampolla كتب:السلام عليكم
هذه أول مشاركة لي في هذا المنتدى العظيم
وحيث أنني أستفدت الكثير وتعلمت الكثير من خلال الأفاضل الموجودين هنا أردت المساعدة في شرح جزء بحثت عنه لمدة ثلاثة أيام وتوصلت له اﻵن بعد عناء والحمد لله
شكرا جزيلا اخى على وجودك معنا و نتمنى منك المزيد و اعلم ان كل شىء تقدمة من اجل تعليم الاخرين لك له اجرا عند الله .
هذا المثال قد طلبة احد الاعضاء منذ فترة ولكنى عجزت على الرد عليه ....فشكرا لك اخى
زهراء- ........
- تاريخ التسجيل : 18/02/2011
المساهمات : 438
النقاط : 769
التقيم : 67
الدولة :
الجنس :
رد: شرح تحديث شجرة الحسابات JTree من قاعدة البيانات
NEXT كتب:جزاكم الله خيرا يا اخى
وإياكم أخي الفاضل
tampolla- ..
- تاريخ التسجيل : 12/08/2015
المساهمات : 10
النقاط : 13
التقيم : 1
الدولة :
الجنس :
رد: شرح تحديث شجرة الحسابات JTree من قاعدة البيانات
زهراء كتب:
شكرا جزيلا اخى على وجودك معنا و نتمنى منك المزيد و اعلم ان كل شىء تقدمة من اجل تعليم الاخرين لك له اجرا عند الله .
هذا المثال قد طلبة احد الاعضاء منذ فترة ولكنى عجزت على الرد عليه ....فشكرا لك اخى
الشكر لكم أختي الفاضلة، لقد تعلمت الكثير من هذا المنتدى الرائع وبدون مجاملة أجد هنا محتوى غني جداً بالمعلومات والشروحات.
ونتمنى من الجميع ألا يبخل بما عنده من علم
وبارك الله فيكم
tampolla- ..
- تاريخ التسجيل : 12/08/2015
المساهمات : 10
النقاط : 13
التقيم : 1
الدولة :
الجنس :
رد: شرح تحديث شجرة الحسابات JTree من قاعدة البيانات
إضافة أخرى قد تكون مفيدة للأخوة
بعد إنشاء شجرة الحسابات قد يود أحدنا ان يستعرض الحسابات كلها بضغطة زر بدﻻً من استعراضها حساب حساب كالتالي

وهو أمر في غاية البساطة
انشيء زر وضع بداخله الكود التالي
نقوم بعمل دوران بعدد الصفوف الموجودة داخل الشجرة بإستخدام دالة getRowCount()
ثم نعطي أمر التمديد لكل صف عن طريق دالة expandRow(رقم الصف)
أتمنى أن يكون الشرح واضح وجزاكم الله كل خير
بعد إنشاء شجرة الحسابات قد يود أحدنا ان يستعرض الحسابات كلها بضغطة زر بدﻻً من استعراضها حساب حساب كالتالي

وهو أمر في غاية البساطة
انشيء زر وضع بداخله الكود التالي
- الكود:
for (int i = 0; i < jTree1.getRowCount(); i++) {
jTree1.expandRow(i);
}
نقوم بعمل دوران بعدد الصفوف الموجودة داخل الشجرة بإستخدام دالة getRowCount()
ثم نعطي أمر التمديد لكل صف عن طريق دالة expandRow(رقم الصف)
أتمنى أن يكون الشرح واضح وجزاكم الله كل خير
tampolla- ..
- تاريخ التسجيل : 12/08/2015
المساهمات : 10
النقاط : 13
التقيم : 1
الدولة :
الجنس :
رد: شرح تحديث شجرة الحسابات JTree من قاعدة البيانات
ولضم جميع العقد الفرعية ننشيء زر آخر وليكن بأسم "ضم الجميع" ونضع بداخله الكود التالي
لاحظ اننا قمنا بعمل دوران عكسي ﻷن الضم يأتي بالتدريج من أكبر رقم صف إلى اصغر رقم (والذي سيكون في مثالنا هنا شجرة الحسابات).
- الكود:
int x = jTree1.getRowCount();
for(int i = x; i>0;i--){
jTree1.collapseRow(i);
}
لاحظ اننا قمنا بعمل دوران عكسي ﻷن الضم يأتي بالتدريج من أكبر رقم صف إلى اصغر رقم (والذي سيكون في مثالنا هنا شجرة الحسابات).
tampolla- ..
- تاريخ التسجيل : 12/08/2015
المساهمات : 10
النقاط : 13
التقيم : 1
الدولة :
الجنس :
رد: شرح تحديث شجرة الحسابات JTree من قاعدة البيانات
شكرا جزيلا اخانا الكريم على مجهودك ....أحسنت و أبدعت فى شرحك
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: شرح تحديث شجرة الحسابات JTree من قاعدة البيانات
أحمد مناع كتب:
شكرا جزيلا اخانا الكريم على مجهودك ....أحسنت و أبدعت فى شرحك
بارك الله فيك أخ أحمد نحن تلاميذك وأستفدنا منكم الكثير فجزاكم الله عنا كل خير
tampolla- ..
- تاريخ التسجيل : 12/08/2015
المساهمات : 10
النقاط : 13
التقيم : 1
الدولة :
الجنس :
رد: شرح تحديث شجرة الحسابات JTree من قاعدة البيانات
الله يعطيك العافية اخى
RANA- .....
- تاريخ التسجيل : 01/08/2013
المساهمات : 79
النقاط : 124
التقيم : 3
الدولة :
الجنس :
| |
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: قواعد البيانات JAVA JDBC
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى
» كبسولات نباتية فارغة
» شحن عملات تيك توك مجانا بدون رقم هاتف
» فوط صحية ناعمة لايام الولادة بالقطن العضوية قوية الامتصاص| organyckw
» اعلانات الباصات الكويت | شركة دعاية واعلان | كواليتي ميكرز | 0096597550465
» كيفية تحديد سعر تصميم تطبيقات الجوال– ايكون تك
» تعلم كيفية حفظ و أسترجاع الصورة فى قاعدة بيانات أكسس باستخدام الكائن Stream object
» كيفية تأسيس شركة في دبي
» افضل واحدث كاميرات المراقبة الامنية والمشاهدة عبر الانترنت
» اصنع شبكتك بنفسك