اذهب إلى المحتوى

السؤال

نشر

ما هو الخطأ فى هذه الدالة 5f1c544eabe91_.thumb.png.9aac864c3a85e0bd818ec0b2c0e321ee.png

 

 

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

5f1c54a760c82_.thumb.png.5f46c1d20ec195afa4650727eb7532f4.png

 

بمعنى رقم 9 و 10 و 11 تم تكراره مرتين ولكن اذا اغلقت البرنامج وفتحته يختفى تانى .. واذا ضغط عليه يظهر لى الخطأ اللى فى الصورة الاولى 


هذه دالة أخرى ممكن يكون الخطأ فيها .. 


5f1c54ab671ba_.thumb.png.7bfb595c95e4b16496df3de642217bae.png



وشكرا مقدما 

Recommended Posts

  • 0
نشر

 ما لاحظته في الكود الخاص بخضرتك أنه في كل مرة تضيف فيها منتج جديد إلى الجدول يتم إضافة هذا المنتج  إلى قائمة المنتجات. فيصبح محتوى تلك القائمة هو المنتجات الموجودة مسبقا بالإضافة إلى المنتج الجديد. بعد ذلك تقوم بعمل  for loop  على القائمة بأكملها لتعرض كل محتوياتها في الجدول (المنتجات السابقة مع المنتج الجديد) .

أحد حلول هذه المشكلة:

  • مثلًا تستخدم جملة شرطية (if statement) داخل ال for loop لتقارن بين ال ids الخاصة بالمنتجات الموجودة بالقائمة و ال ids الخاصة بالمنتجات المعروضة بالجدول. فإذا كان المنتج موجود في الجدول لا تضيفه و تكمل الدورة و إن لم يكن موجود في الجدول تقوم بعرضه في الجدول. 

 

  • يمكنك تجربة الكود التالي أيضًا: 

 هذا الكود يستخدم  batch insert لإضافة المنتجات إلى الجدول.

try {
  connection con.setAutoCommit(false);        
  PreparedStatement prepStmt = con.prepareStatement(    
    "insert into product(code,name,price,available) values (?,?,?,?");
  Iterator<Product> it = li.iterator();
  while(it.hasNext()){
     Product p = it.next();
    prepStmt.setString(1,p.getCode());            
    prepStmt.setString(2,p.getCode());
    prepStmt.setInt(3,p.getPrice());
    prepStmt.setBoolean(4,p.isAvailable());
    prepStmt.addBatch();                      

  }      
  int [] numUpdates=prepStmt.executeBatch();
  for (int i=0; i < numUpdates.length; i++) {
    if (numUpdates[i] == -2)
      System.out.println("Execution " + i + 
        ": unknown number of rows updated");
    else
      System.out.println("Execution " + i + 
        "successful: " + numUpdates[i] + " rows updated");
  }
  con.commit();
} catch(BatchUpdateException b) {
  // process BatchUpdateException
} 

 

  • 0
نشر
بتاريخ 1 ساعة قال Yomna Raouf:

مثلًا تستخدم جملة شرطية (if statement) داخل ال for loop لتقارن بين ال ids الخاصة بالمنتجات الموجودة بالقائمة و ال ids الخاصة بالمنتجات المعروضة بالجدول. فإذا كان المنتج موجود في الجدول لا تضيفه و تكمل الدورة و إن لم يكن موجود في الجدول تقوم بعرضه في الجدول. 

كيف اقوم بهذه الجملة الشرطية ؟

  • 0
نشر

ما كنت اقصده هو:

for (int i = 0; i< list.lenght ;i++){
	for (int j =0; j< (عدد صفوف الجدول الحالية) ; j++) {
    	if (اّي دي العنصر رقم اّي في القانمة  لا يساوي  اّي دي العنصر رقم جي في الجدول){
        	// قم بإضافة المنتج الجديد إلى الجدول
        }
    }
}

أو إستخدام الطريقة التالية:

// يمكنك إستخدام الطريقة التالية 


// هنا تقوم بصناعة الجدول الذي ستضيف إليه المنتجات
DefaultTableModel CurrentPurchases= new DefaultTableModel();
Pname=rs.getString("ProductName");
Price=rs.getString("Price");
CurrentPurchases.addRow(new Object[]{Pname,Price});

// You need to get model from your table, to which you want to add a new row. For example you have 2 methods for      creation table and for adding row to that table
// يجب أن تمتلك موديل من الجدول الذي ستضيف له الصفوف 
// فمثلًا سيكون عندك 2 methods
// إحداها من أجل صنع الجدول و الأخري من أجل إضافة الصفوف 
// كما  يلي:
    public void init() {
        targetTable = new JTable(new DefaultTableModel());
    }

    public void addRow(){
        ((DefaultTableModel)targetTable.getModel()).addRow(new Object[]{});
    }
// here targetTable it is your table(CurrentPurchases). You need to have reference to that.

يمكنك قراءة المقال التالي كيف تستخدم jtable .

ستجد فيه مثال مشروح مشابه لما تريد تنفيذه. 

  • 0
نشر
بتاريخ منذ ساعة مضت قال Yomna Raouf:

ما كنت اقصده هو:


for (int i = 0; i< list.lenght ;i++){
	for (int j =0; j< (عدد صفوف الجدول الحالية) ; j++) {
    	if (اّي دي العنصر رقم اّي في القانمة  لا يساوي  اّي دي العنصر رقم جي في الجدول){
        	// قم بإضافة المنتج الجديد إلى الجدول
        }
    }
}

أو إستخدام الطريقة التالية:


// يمكنك إستخدام الطريقة التالية 


// هنا تقوم بصناعة الجدول الذي ستضيف إليه المنتجات
DefaultTableModel CurrentPurchases= new DefaultTableModel();
Pname=rs.getString("ProductName");
Price=rs.getString("Price");
CurrentPurchases.addRow(new Object[]{Pname,Price});

// You need to get model from your table, to which you want to add a new row. For example you have 2 methods for      creation table and for adding row to that table
// يجب أن تمتلك موديل من الجدول الذي ستضيف له الصفوف 
// فمثلًا سيكون عندك 2 methods
// إحداها من أجل صنع الجدول و الأخري من أجل إضافة الصفوف 
// كما  يلي:
    public void init() {
        targetTable = new JTable(new DefaultTableModel());
    }

    public void addRow(){
        ((DefaultTableModel)targetTable.getModel()).addRow(new Object[]{});
    }
// here targetTable it is your table(CurrentPurchases). You need to have reference to that.

يمكنك قراءة المقال التالي كيف تستخدم jtable .

ستجد فيه مثال مشروح مشابه لما تريد تنفيذه. 

للأسف لم تنفع اى الحلول .. لكن شكرا لمجهودك

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...