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

طباعة جدول من قاعدة البيانات

بدأه بيرووو في 18 مايو 2011 · 10 رد · 863 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ..

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

الهدف من المشروع:

استعلام جداول من قاعدة البيانات وثم وضعهم في Tabbed Pane في الفريم.. واذا ضغط المستخدم على زر الطباعه سوف يطبع له الجدول المختار

المشاكل التي تواجهني:

1) اذا اخذت الجدول المختار من TabbedPane وحفظته في table جديد .. يحذف الجدول من TabbedPane بمعنى يحذف من الفريم

2) الطباعه لاتتنفذ .. لا يوجد اي خطأ واضح .. لكن مجرد الضغط على الزر خطوات الطباعه تتم صحيحه لكن لا يطبع شي .. بمعنى: ان النافذه التاليه تظهر بعد ضغط على زر الطباعه

p><p> <img src=

وهذا هو الكود

try{
          JTable table=new JTable();
          table.add(jTabbedPane1.getSelectedComponent());
          MessageFormat footer = new MessageFormat("Page - {0}");
          MessageFormat header = new MessageFormat(" Course Schedule");
          table.print( PrintMode.NORMAL, header, footer, true , null, true, null);
          boolean complete =  table.print();
          if(complete(
              JOptionPane.showMessageDialog(rootPane, " Printing Process was done Successfully");
          else
              JOptionPane.showMessageDialog(rootPane, " Printing Process didn't Done"); 
   }

           catch (PrinterException ex) 
          {
           JOptionPane.showMessageDialog(rootPane,"  Error printing: " + ex.getMessage());
           }
#2

بالنسبة للجدول اعتقد ان عليك التعديل في الموديل وليس في JTable

يعني خلي عمليات الحذف والاضافه على الTableModel

بالنسبة للسؤال الثاني لم افهم هل تريد الطباعة على ورق ام على الشاشة وضح لو سمحت

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#3
mental-driller كتب:

بالنسبة للجدول اعتقد ان عليك التعديل في الموديل وليس في JTable

يعني خلي عمليات الحذف والاضافه على الTableModel

بالنسبة للسؤال الثاني لم افهم هل تريد الطباعة على ورق ام على الشاشة وضح لو سمحت

شكرا لك اخوي .. بالنسبه للطباعه اريد ان تكون على ورق اي من الطابعه

اتمنى اني وصلت المعلومه

#4

الخطأ كله من طريقه اضافتك للجدول، فانت تستخدم طريقه خاطئة

شوف مثلا لما انا عملت جدول فاضي الطباعه تتم بشكل عادي

import javax.swing.JTable;
import java.awt.print.PrinterException;
import java.text.MessageFormat;
import javax.swing.JOptionPane;

public class Main {

  public static void main(String[] args) throws Exception {
    try{
          JTable table=new JTable(5,3);

          MessageFormat footer = new MessageFormat("Page - {0}");
          MessageFormat header = new MessageFormat(" Course Schedule");
         // table.print( PrintMode.NORMAL, header, footer, true , null, true, null);
          boolean complete =  table.print();
          if(complete)
              JOptionPane.showMessageDialog(null, " Printing Process was done Successfully");
          else
              JOptionPane.showMessageDialog(null, " Printing Process didn't Done");
   }

           catch (PrinterException ex)
          {
           JOptionPane.showMessageDialog(null,"  Error printing: " + ex.getMessage());
           }

  }
}

اضف للجدول بشكل صحيح وإن شاء الله يمشي

موفق اخي العزيز

تم تعديل هذه المشاركة بواسطة mental-driller في 18 مايو 2011 في 22:23

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#5
mental-driller كتب:

الخطأ كله من طريقه اضافتك للجدول، فانت تستخدم طريقه خاطئة

شوف مثلا لما انا عملت جدول فاضي الطباعه تتم بشكل عادي

import javax.swing.JTable;
import java.awt.print.PrinterException;
import java.text.MessageFormat;
import javax.swing.JOptionPane;

public class Main {

  public static void main(String[] args) throws Exception {
    try{
          JTable table=new JTable(5,3);

          MessageFormat footer = new MessageFormat("Page - {0}");
          MessageFormat header = new MessageFormat(" Course Schedule");
         // table.print( PrintMode.NORMAL, header, footer, true , null, true, null);
          boolean complete =  table.print();
          if(complete)
              JOptionPane.showMessageDialog(null, " Printing Process was done Successfully");
          else
              JOptionPane.showMessageDialog(null, " Printing Process didn't Done");
   }

           catch (PrinterException ex)
          {
           JOptionPane.showMessageDialog(null,"  Error printing: " + ex.getMessage());
           }

  }
}

اضف للجدول بشكل صحيح وإن شاء الله يمشي

موفق اخي العزيز

اخي الكريم ..

شكراً جزيلا لك لمساعدتك ..

يوجد تقدم في حل المشكله .. لكن هناك خطأ غريب !!!

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

على الرغم انني أتبعت نفس الطريقه التي قلتها

اتنمنى منك المساعده

#6

بالتأكيد لاني عملت جدول فارغ

سوف اقول لك ماذا تعمل كتجربه للطباعة : قم بعمل مصفوفتين مصفوفه للاعمدة ومصفوفه للصفوف وادخل فيهم قيم عشوائيه

ثم مرر المصفوفتين الى constructor تبع الجدول سوف تقوم الطابعه بطباعة الجدول العشوائي

الان بالرجوع لمشكلتك وهي القرأة من قاعدة البيانات

كما اوضحت لك سلفا ان الحذف و الاضافه يتم في Table Model وانت في برنامجك قرات الى داخل الJtable

اريد منك ان تعي شيء مهم هنا وهو ان JTable مجرد اداة عرض وتسمى View بينما ادخال البيانات والتلاعب بها يتم عبر ال Table Model

وهو مايسمى بModel في نظام الMVC (Model/ View/ Controller) اقرأ في اي مكان كيف يتم اضافه TableModel واضافة البيانات له

اذا لم تجد جوابك فانا ساجيبك ، على العموم ابقني على اطلاع فيما يخص تقدم برنامجك

بالتوفيق

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#7
mental-driller كتب:

بالتأكيد لاني عملت جدول فارغ

سوف اقول لك ماذا تعمل كتجربه للطباعة : قم بعمل مصفوفتين مصفوفه للاعمدة ومصفوفه للصفوف وادخل فيهم قيم عشوائيه

ثم مرر المصفوفتين الى constructor تبع الجدول سوف تقوم الطابعه بطباعة الجدول العشوائي

الان بالرجوع لمشكلتك وهي القرأة من قاعدة البيانات

كما اوضحت لك سلفا ان الحذف و الاضافه يتم في Table Model وانت في برنامجك قرات الى داخل الJtable

اريد منك ان تعي شيء مهم هنا وهو ان JTable مجرد اداة عرض وتسمى View بينما ادخال البيانات والتلاعب بها يتم عبر ال Table Model

وهو مايسمى بModel في نظام الMVC (Model/ View/ Controller) اقرأ في اي مكان كيف يتم اضافه TableModel واضافة البيانات له

اذا لم تجد جوابك فانا ساجيبك ، على العموم ابقني على اطلاع فيما يخص تقدم برنامجك

بالتوفيق

لازالت المشكله موجوده على الرغم من انني استخدمت Table Model

سأوضح لك شكل الفريم لتكون على اطلاع ..

لدي في الفريم جدولين كل واحد منهما في Scroll Pane منفصل وكلا ال Scroll Pane في Tabbed Pane

بمعنى كل واحد من الجدولين في tab مختلف

الفكره هي عندما تظهر الفريم يختار المستخدم الجدول الذي يريد طباعته ثم يضغط على رز الطباعه

المشكله هنا ان جميع خطوات الطباعه تتم بصحيح لكن لا يوجد في الورقه سوا خط فاصل على طول الصفحه في النصف ولا يوجد اي معلومات

لااعرف اين الخطا بالتحديد !!!

وهذا هو الكود ..

 
try{

JTable table=new JTable(20,10);
          DefaultTableModel dtm1=new  DefaultTableModel();
          int row=0;
                  if(jScrollPane1==jTabbedPane1.getSelectedComponent())
                  {                    
                      row=t1.getRowCount();
                      for(int j=0;j<row;j++)
                      {
                      Object x[]={t1.getValueAt(j, 1),t1.getValueAt(j, 2),t1.getValueAt(j, 3),t1.getValueAt(j, 4), t1.getValueAt(j, 5)
                                      ,t1.getValueAt(j, 6),t1.getValueAt(j, 7),t1.getValueAt(j, 8),t1.getValueAt(j, 9),t1.getValueAt(j, 10)};
                          dtm1.insertRow(j, x);
                          table.setModel(dtm1);
                      }
                  }
                  else
                      if(jScrollPane2==jTabbedPane1.getSelectedComponent())
                      {

                          row=t2.getRowCount();
                          for(int j=0;j<row;j++)
                          {
                           Object x[]={t2.getValueAt(j, 1),t2.getValueAt(j, 2),t2.getValueAt(j, 3),t2.getValueAt(j, 4), t2.getValueAt(j, 5)
                                          ,t2.getValueAt(j, 6),t2.getValueAt(j, 7),t2.getValueAt(j, 8),t2.getValueAt(j, 9),t2.getValueAt(j, 10)};
                                   dtm1.insertRow(j, x);
                                  table.setModel(dtm1);
                          }
                      }
      boolean complete=table.print();
         if(complete)
              JOptionPane.showMessageDialog(rootPane, " Printing Process was done Successfully");
          else
              JOptionPane.showMessageDialog(rootPane, " Printing Process didn't Done ");
     }
        catch (PrinterException ex) {
               JOptionPane.showMessageDialog(rootPane,"  Error printing: " + ex.getMessage());
             }

وشكرا لك مرة اخرى

تم تعديل هذه المشاركة بواسطة بيرووو في 22 مايو 2011 في 02:03

#8

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

ثانيا هل من الممكن ان تكتب الكود كاملا حتى اجربه عندي؟

كتجربه بسيطه قم بعمل System.out.println داخل كل شرط لترى ان كان الشرط اصلا يتنفذ؟

في الconstructor تبع JTable اعمله JTable() بس مافي داعي تحدد الحجم ، يمكنك استخدام الداله addRow() لكي تضيف للسطر التالي راسا

تم تعديل هذه المشاركة بواسطة mental-driller في 22 مايو 2011 في 05:27

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#9
mental-driller كتب:

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

ثانيا هل من الممكن ان تكتب الكود كاملا حتى اجربه عندي؟

كتجربه بسيطه قم بعمل System.out.println داخل كل شرط لترى ان كان الشرط اصلا يتنفذ؟

في الconstructor تبع JTable اعمله JTable() بس مافي داعي تحدد الحجم ، يمكنك استخدام الداله addRow() لكي تضيف للسطر التالي راسا

ارفقت الملف وهذا هو الكود كامل تقريبا ..

اتمنى منك الاطلاع عليه وتخبرني اين الخطأ ..

#10
mental-driller كتب:

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

ثانيا هل من الممكن ان تكتب الكود كاملا حتى اجربه عندي؟

كتجربه بسيطه قم بعمل System.out.println داخل كل شرط لترى ان كان الشرط اصلا يتنفذ؟

في الconstructor تبع JTable اعمله JTable() بس مافي داعي تحدد الحجم ، يمكنك استخدام الداله addRow() لكي تضيف للسطر التالي راسا

ارفقت الملف وهذا هو الكود كامل تقريبا ..

اتمنى منك الاطلاع عليه وتخبرني اين الخطأ ..

printtest.rar

#11

up

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