الوقت/التاريخ الآن هو الخميس يوليو 16, 2020 5:21 pm

6 نتيجة بحث عن jtable

إضافة جداول JTable فى المكون الرسومي JComboBox

أهلا بكم

سنقوم في هذا المقال بتخصيص المكون #JComboBox بحيث تقبل عناصره الجداول (#JTable) بدلاً من النص البسيط وذلك كما فى الشكل التالى :

الوسم jtable على المنتدى منتدى مصر التقني Jtable-in-combo

الخطوات :

1_فى هذه الخطوة سنجعل #JComboBox يتكون من عناصر ..كل عنصر سيكون عبارة عن جدول وعنوان الجدول ، ولهذا يجب علينا إنشاء فئة خاصة بنا وليكن باسم (ItemCombo.java) على النحو التالي:

الكود:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class ItemCombo extends JPanel {    
    
    private JTable tabla;
    private JLabel tablaNombre;

    
    public ItemCombo() {
        super();
        init();
    }
    
    private void init() {
        tabla = new JTable();
        tablaNombre = new JLabel();

        // أبعاد المكون
       setPreferredSize(new Dimension(300, 100));

        JScrollPane scroll = new JScrollPane();
        scroll.setViewportView(tabla);

        //إنشاء حاوية
        JPanel jPanel1 = new JPanel();
        jPanel1.setBackground(new Color(0, 0, 200));
        jPanel1.setPreferredSize(new Dimension(0, 16));
        jPanel1.setLayout(new GridBagLayout());

        //لون النص
        tablaNombre.setForeground(new Color(255, 255, 255));
        jPanel1.add(tablaNombre);

        //تخطيط للمكون
        setLayout(new BorderLayout());
        
        //يتم إضافة مكونات العنوان والجدول
        add(jPanel1, BorderLayout.NORTH);
        add(scroll, BorderLayout.CENTER);        
    }        
        
    public String getNombreTabla() {
        return tablaNombre.getText();
    }

    public void setNombreTabla(String nombreTabla) {        
        tablaNombre.setText(nombreTabla);
    }

    public DefaultTableModel getTablaModel() {
        return (DefaultTableModel) tabla.getModel();
    }

    public void setTablaModel(DefaultTableModel tablaModel) {        
        this.tabla.setModel(tablaModel);
    }
    
}



2_الآن يجب أن نعلم #JComboBox كيفية تقديم كل عنصر من عناصر القائمة أعلاه ، لهذا سنقوم بانشاء الفئة  ItemComboRenderer.java نضيف الكود التالي:

الكود:
public class ItemComboRenderer extends ItemCombo implements ListCellRenderer{
    
    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index,
            boolean isSelected, boolean cellHasFocus)
    {
        if (value != null) {// اذا كان هناك عنصر
            
            setTablaModel(((ItemCombo) value).getTablaModel());
            setNombreTabla(((ItemCombo) value).getNombreTabla());            
            
            // إذا تم تحديد العنصر ، فلن يعرض الجدول
             // لكن فقط اسم الجدول
            if (index == -1) {
                JLabel label = new JLabel(getNombreTabla());
                return label;
            }
           / / عرض الجدول بالكامل
            return this;
        } else {//يتم عرض تسمية فارغة
            JLabel label = new JLabel();
            return label;
        }
    }
    

}



3_نفتح نموذج #JFrame الخاص بنا في وضع التصميم ونضيف #JComboBox بأبعاد 320 × 30 كما فى الشكل التالى :

الوسم jtable على المنتدى منتدى مصر التقني Jcombo_jtable

4_نفتح JFrame في وضع الكود وفي مُنشئ الفئة نعلن عن  #DefaultComboBoxModel لبيانات combobox على النحو التالى :

الكود:
DefaultComboBoxModel model = new DefaultComboBoxModel();


بعد ذلك ، نضيف عنصرًا أولًا كما يلي ، نقوم بإنشاء مثيل جديد لمكون ItemCombo الخاص بنا ، ونضيف اسمًا للجدول و DefaultTableModel لبيانات الجدول.

أخيرًا نضيف هذا item1 إلى نموذج combobox

الكود:
/**
 * Item #1
 */
ItemCombo item1 = new ItemCombo();
item1.setNombreTabla("Tabla de Productos");
DefaultTableModel tablemodel1 = new DefaultTableModel(new Object[][]{
    {"Mesa de Roble", "100 Uds.", "200 $us."},
    {"Estante de Pino", "24 Uds.", "69 $us"},
    {"Cabecera de cama", "3 Uds.", "1.200 $us"}
},
new Object[]{"Nombre", "Cantidad", "Precio"});
item1.setTablaModel(tablemodel1);
model.addElement(item1);


الإجراء أعلاه لإضافة المزيد من العناصر .

5_أخيرًا ، نضيف النموذج وجهاز العارض إلى combobox كما يلي:

الكود:
jComboBox1.setModel(model);
jComboBox1.setRenderer(new ItemComboRenderer());



الكود الكامل للخطوتين 4 و 5 على النحو التالى :

الكود:
  //Model para el ComboBox
        DefaultComboBoxModel model = new DefaultComboBoxModel();

        /**
         * Item #1
         */
        ItemCombo item1 = new ItemCombo();
        item1.setNombreTabla("Tabla de Productos");
        DefaultTableModel tablemodel1 = new DefaultTableModel(new Object[][]{
            {"Mesa de Roble", "100 Uds.", "200 $us."},
            {"Estante de Pino", "24 Uds.", "69 $us"},
            {"Cabecera de cama", "3 Uds.", "1.200 $us"}
        },
                new Object[]{"Nombre", "Cantidad", "Precio"});
        item1.setTablaModel(tablemodel1);
        model.addElement(item1);

        /**
         * Item #2
         */
        ItemCombo item2 = new ItemCombo();
        item2.setNombreTabla("Tabla de Servicios");
        DefaultTableModel tablemodel2 = new DefaultTableModel(new Object[][]{
            {"Medicina Interna", "09:00 a 12:00", "100 $us."},
            {"Nutrición", "14:00 a 18:00", "40 $us"},
            {"Traumatologia", "10:00 a 13:00", "77 $us"}
        },
                new Object[]{"Nombre", "Horario", "Consulta"});
        item2.setTablaModel(tablemodel2);
        model.addElement(item2);      
        
        jComboBox1.setModel(model);
        jComboBox1.setRenderer(new ItemComboRenderer());




و النتيجة :

الوسم jtable على المنتدى منتدى مصر التقني Jtable-in-combo
تحياتى لكم
من طرف NEXT
في الخميس فبراير 06, 2020 7:35 pm
 
ابحث في: واجهة المستخدم الرسومية Java Swing
موضوع: إضافة جداول JTable فى المكون الرسومي JComboBox
المساهمات: 1
مشاهدة: 169

تجميد اعمدة فى JTable اثناء تمرير jScrollBar

عادة ما يتم عرض #JTable في #JScrollPane. يسمح هذا للجدول بالتمرير عموديًا أو أفقيًا كما هو مطلوب. يؤدي التمرير الأفقي إلى التمرير لكل الأعمدة في الجدول. في بعض الحالات ، قد ترغب في منع العمود (الأعمدة) الأمامية في الجدول من التمرير.

لا يدعم JTable هذه الوظيفة ، لكن بالاقتران مع #JScrollPane ، يمكننا تحقيق الوظيفة المطلوبة. يتم استخدام فئة #FixedColumnTable كفئة راحة للتعامل مع الجدول والتمرير. وراء الكواليس ، يتم تقسيم الجدول الرئيسي إلى قسمين. سيعرض الجدول الثاني الأعمدة الثابتة ويضاف إلى رأس صف أجزاء التمرير. سيقوم هذا الجدول الثابت بمشاركة #TableModel و #SelectionModel مع الجدول الرئيسي.

ستقوم بإنشاء الفئة #FixedColumnTable بمجرد إضافة #TableModel إلى الجدول الرئيسي الخاص بك وإضافة الجدول الرئيسي إلى جزء التمرير. ستكون النتيجة عبارة عن جزء تمرير يحتوي على جدولين ، يمكن تمرير جدول واحد فقط أفقيًا. تم استخدام الكود التالي لإنشاء جزء التمرير في الصورة أدناه:

الوسم jtable على المنتدى منتدى مصر التقني Fixed-column-table1

فيما ادناه الشفرة الخاصة بالفئة

الكود:
import java.beans.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;

public class FixedColumnTable implements ChangeListener, PropertyChangeListener
{
   private JTable main;
   private JTable fixed;
   private JScrollPane scrollPane;

   public FixedColumnTable(int fixedColumns, JScrollPane scrollPane)
   {
      this.scrollPane = scrollPane;

      main = ((JTable)scrollPane.getViewport().getView());
      main.setAutoCreateColumnsFromModel( false );
      main.addPropertyChangeListener( this );

      //  استخدم الجدول الموجود لإنشاء جدول جديد لمشاركة نموذج البيانات و ListSelectionModel

      int totalColumns = main.getColumnCount();

      fixed = new JTable();
      fixed.setAutoCreateColumnsFromModel( false );
      fixed.setModel( main.getModel() );
      fixed.setSelectionModel( main.getSelectionModel() );
      fixed.setFocusable( false );

      // أزل الأعمدة الثابتة من الجدول الرئيسي وأضفها إلى الجدول الثابت
      for (int i = 0; i < fixedColumns; i++)
      {
           TableColumnModel columnModel = main.getColumnModel();
           TableColumn column = columnModel.getColumn( 0 );
           columnModel.removeColumn( column );
         fixed.getColumnModel().addColumn( column );
      }

      //  أضف الجدول الثابت إلى جزء التمرير

        fixed.setPreferredScrollableViewportSize(fixed.getPreferredSize());
      scrollPane.setRowHeaderView( fixed );
      scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER, fixed.getTableHeader());

      // Synchronize scrolling of the row header with the main table

      scrollPane.getRowHeader().addChangeListener( this );
   }

   /*
    *  إرجاع الجدول الذي يتم استخدامه في رأس الصف
    */
   public JTable getFixedTable()
   {
      return fixed;
   }
//
//  تطبيق ChangeListener
//
   public void stateChanged(ChangeEvent e)
   {
      //  مزامنة شريط التمرير جزء التمرير مع رأس الصف

      JViewport viewport = (JViewport) e.getSource();
      scrollPane.getVerticalScrollBar().setValue(viewport.getViewPosition().y);
   }
//
//  تطبيق الحدث  PropertyChangeListener
//
   public void propertyChange(PropertyChangeEvent e)
   {
      //  حافظ على تزامن الجدول الثابت مع الجدول الرئيسي

      if ("selectionModel".equals(e.getPropertyName()))
      {
         fixed.setSelectionModel( main.getSelectionModel() );
      }

      if ("model".equals(e.getPropertyName()))
      {
         fixed.setModel( main.getModel() );
      }
   }
}


ويتم استخدام الفئة التى تم إنشائها اعلاه على النحو التالى :

الكود:

JTable table = new JTable(20, 10);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.getColumnModel().getColumn(0).setPreferredWidth(50);
table.getColumnModel().getColumn(1).setPreferredWidth(100);
JScrollPane scrollPane= new JScrollPane( table );

FixedColumnTable fct = new FixedColumnTable(2, scrollPane);


المصدر https://tips4java.wordpress.com/2008/11/05/fixed-column-table/
من طرف NEXT
في الخميس نوفمبر 28, 2019 5:52 pm
 
ابحث في: واجهة المستخدم الرسومية Java Swing
موضوع: تجميد اعمدة فى JTable اثناء تمرير jScrollBar
المساهمات: 0
مشاهدة: 164

طباعة جدول البيانات JTable مباشرة باستخدام table.print

اهلا بكم 

يوفر العنصر الرسومي #JTable الأساليب التي تتيح لك تنفيذ مهام الطباعة الأساسية والمتقدمة التى تحتاجها إلى طباعة جدول ، وهى الطريقة #print التى تستخدم لطباعة الجدول مباشرة .

تحتوي هذة الطريقة على العديد من النماذج ذات مجموعات الوسائط المختلفة. تعد هذه الطريقة طاولتك ، وتحصل على كائن قابل للطباعة ، وترسله إلى طابعة.

و أسهل طريقة لطباعة الجدول الخاص بك هي استدعاء الطريقة print بدون معلمات.كما فى الشفرة التالية :

الكود:
try {
          table.print();
        } catch (PrinterException pe) {
          System.err.println("Error printing: " + pe.getMessage());
        }



لكن عند استدعاء طريقة الطباعة بدون أي معلمات ، يتم عرض مربع حوار طباعة ، ثم تتم طباعة الجدول الخاص بك بشكل تفاعلي في وضع FIT_WIDTH بدون رأس أو تذييل

أما عند استدعاء طريقة الطباعة بكافة المعلمات ، فإنك تستطيع استخدام ميزات الطباعة مثل وضع الطباعة ورأس تذييل الصفحة وسمات الطباعة وأيضًا ما إذا كنت تريد إظهار مربع حوار طباعة أم لا ، وما إذا كنت تريد طباعة بشكل تفاعلي أو غير تفاعلي. 

و تلك المعلمات على النحو التالى :
الكود:

boolean complete = table.print(JTable.PrintMode printMode,
                               MessageFormat headerFormat,
                               MessageFormat footerFormat,
                               boolean showPrintDialog,
                               PrintRequestAttributeSet attr,
                               boolean interactive,
                               PrintService service);



دعونا الان نلقي نظرة على تلك المعلمات وكيفية استخدامها :

1_ المعلمة #PrintMode :

تلك المعلمة مسؤولة عن تحديد وضعية الطباعة التى تحدد قياس المخرجات الطباعة. يمكنك طباعة الجدول الخاص بك في أحد الأوضاع التالية:


  1. PrintMode.NORMAL
  2. PrintMode.FIT_WIDTH


في الوضع العادي PrintMode.NORMAL يتم طباعة جدول بحجمه الحالي. إذا لم تتناسب الأعمدة مع الصفحة ، فإنها تنتشر عبر صفحات إضافية وفقًا لـ #ComponentOrientation في الجدول. 

أما في وضع FIT_WIDTH ، يكون للجدول حجم أصغر ، إذا لزم الأمر ، لملاءمة جميع الأعمدة في كل صفحة. لاحظ أن كلا من العرض والارتفاع يتم قياسهما لتوفير إخراج بنفس نسبة الارتفاع. في كلا الوضعين ، تنتشر الصفوف عبر عدة صفحات بالتتابع مع أكبر عدد ممكن من الصفوف على الصفحة.

2_ المعلمتين #headerFormat# / footerFormat

تم توفير الرؤوس والتذييلات بواسطة معلمات #MessageFormat. تسمح هذه المعلمات بتنسيق نص لرأس وتذييل الصفحة. على النحو التالى :

الكود:
MessageFormat header = new MessageFormat("تقرير بيانات الطلاب");
    
  MessageFormat footer = new MessageFormat("Page - {0}");


يمكنك ملاحظة من الشفرة اعلاه أنه  يمكنك إدراج رقم صفحة باستخدام {0}.

3_ المعلمة #showPrintDialog

تسميح هذه المعلمة باظهار مربع حوار الطباعة التى يمكنك من خلالة أن تحدد طابعة , عدد النسخ , تغيير سمات الطباعة ,إلغاء الطباعة قبل أن تبدأ ....الخ
الوسم jtable على المنتدى منتدى مصر التقني Ss2

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

4_المعلمة #interactive

هذه المعلمة تحدد وضع الطباعة بشكل تفاعلي أو غير تفاعلي ...في الوضع التفاعلي ، يظهر مربع حوارى لظهر تقدم عملية الطباعة مع خيار إلغاء الطباعة كما فى الصورة التالية :

الوسم jtable على المنتدى منتدى مصر التقني PrintingProgress

أما فى الوضع غير التفاعلى يمكنك طباعة الجدول الخاص مباشرة ، تبدأ الطباعة فورًا في مؤشر ترابط إرسال الأحداث وتمنع تمامًا أي أحداث تتم معالجتها. من ناحية ، يحتفظ هذا الوضع بأمان الجدول ضد أي تغييرات حتى تتم الطباعة

واليكم مثال كامل لعملية الطباعة الجدول مع بعض التنسيق :

الكود:
private void print_Table() {
   
  MessageFormat header = new MessageFormat("تقرير بيانات الطلاب");
   
  MessageFormat footer = new MessageFormat("Page - {0}");
           
 
        try {
            /* print the table */
            boolean complete =  jTable1.print(JTable.PrintMode.FIT_WIDTH, header, footer,
                                                true, null,
                                                  true, null);
 
            /* if printing completes */
            if (complete) {
                /* show a success message */
                JOptionPane.showMessageDialog(this,
                                              "تم الطباعة",
                                              "حالة الطباعة",
                                              JOptionPane.INFORMATION_MESSAGE);
            } else {
                /* show a message indicating that printing was cancelled */
                JOptionPane.showMessageDialog(this,
                                              "إلغاء الطباعة",
                                              "حالة الطباعة",
                                              JOptionPane.INFORMATION_MESSAGE);
            }
        } catch (PrinterException pe) {
            /* Printing failed, report to the user */
            JOptionPane.showMessageDialog(this,
                                          "خطأ : " + pe.getMessage(),
                                          "معلومات الطباعة",
                                          JOptionPane.ERROR_MESSAGE);
        }
    }         
من طرف السنى
في الأربعاء نوفمبر 27, 2019 4:25 pm
 
ابحث في: واجهة المستخدم الرسومية Java Swing
موضوع: طباعة جدول البيانات JTable مباشرة باستخدام table.print
المساهمات: 2
مشاهدة: 258

انشاء تقارير JasperReports مع iReport ...مقال 10_التعامل مع مصادر البيانات _ملفات Excel كمصدر للبيانات

أهلا وسهلا بكم إخواني الكرام 

مازلنا مع مقالات إنشاء تقارير المكتبة تقارير #JasperReports مع الواجهة الرسومية #iReport وتعلمنا فى مقالات سابقة كيفية إستخدام قواعدة البيانات كمصدر لملئ بيانات التقرير الخاص بنا ليس ذلك فحسب بل تعلمنا كيفية إستخدام المكون #Jtable وايضا فئات #JavaBeans كمصادر لبيانات التقرير .

فى هذا المقال سنتعلم سويا كيفية إستخدام ملفات Excel كمصدر لبيانات التقرير الخاص بنا وذلك ببضع خطوات بسيطة :

1_ قم بالنقر على ايقونة Report Datasource

الوسم jtable على المنتدى منتدى مصر التقني 435614416

2_سيتم فتح مربع الحوار Connections / Datasource قم بالنقر على زر الامر New

الوسم jtable على المنتدى منتدى مصر التقني 553407284

3_سيتم فتح مربع حوار آخر من هنا ، حدد الخيار احد الخيارات التالية وانقر فوق "التالي".


  • Microsoft Excel(xls) data source ويتم تحديد هذا الخيار اذا كنت تستخدم إصدار قديم من الاكسل 2000 حتى 97
  • Microsoft Excel 2007(xlsx) data source ويتم تحديد هذا الخيار بدء من إصدار 2007 حتى 2010


وبما إننا نستخدم ملف أكسل 2007 فاننا سنحدد الخيار الثاني :

الوسم jtable على المنتدى منتدى مصر التقني 754240934


4_سوف تفتح نافذة أخرى.تريد منك تحديد بعض التفاصيل كما فى الصورة التالية :

الوسم jtable على المنتدى منتدى مصر التقني Excell+datasource2

حيث أن :

  • name :وضع اسم لمصدر البيانات لاستخداما فيما بعد
  • Excell file :فى هذه الخانة يتم تحديد مسار ملف الاكسل لقرائتة


بعد ذلك انقر فوق "Get Columns name from the first row" لبدء قراة الملف بداية من الصف الاول

5_قم باستدعاء نافذة Query Editor ثم أختر التويب Excell Datasource ثم قم بالنقر على رز الامر getfields from datasource لتجد الحقول كما فى الشكل التالى :

الوسم jtable على المنتدى منتدى مصر التقني Excell+datasource3

6_عد إلى منطقة تصميم iReport.وقم بسحب وإسقاط الحقول التي تريد استخدامها على اى منطقة بالتقرير و النتيجة :

الوسم jtable على المنتدى منتدى مصر التقني Excell+datasource4
من طرف أحمد مناع
في الثلاثاء سبتمبر 24, 2019 10:17 am
 
ابحث في: إنشاء التقارير JasperReports مع iReport
موضوع: انشاء تقارير JasperReports مع iReport ...مقال 10_التعامل مع مصادر البيانات _ملفات Excel كمصدر للبيانات
المساهمات: 2
مشاهدة: 308

انشاء تقارير JasperReports مع iReport ...مقال 9 _التعامل مع مصادر البيانات_ JavaBeans كمصدر بيانات.

أهلا وسهلا بكم إخواني الكرام 

بالإضافة إلى إستخدام قواعد البيانات و الجدوال #JTable لملئ التقارير بالبيانات، يتيح لنا المكتبة #JasperReports استخدام كائنات الـ Java القديمة _ (POJOs) أختصارا Plain Old Java Objects_ كمصادر بيانات ويتم إنشاء تلك الكائنات فى فئة تسمي #JavaBeans وهى فئة مخصصة تتيح للمستخدم الوصول للكائنات التى تحتويها من خلال عدد من أساليب "getter" و "setter" 

لنقم بإنشاء كائن Java يمكن استخدامه كمصدر بيانات لمثالنا باتباع الخطوات التالية :


1_إنشاء الفئة JavaBeans بإسم Student بها ثلاث كائنات id,name,job كما هو موضح :
الكود:

public class Student implements java.io.Serializable {
    
private int id;
private String name,job;

public void setId(int id)
 { this.id = id; }


public int getId()
 { return id; }




public void setName(String name)
 { this.name = name; }

public String getName()
 { return name; }



public void setJob(String job)
 { this.job= job; }

public String getJob()
 { return job; }

}



2_ إفتح قالب التقرير JRXML لانشاء الحقول كما يلي:


الكود:
<field name="id" class="java.lang.Integer">
 <fieldDescription><![CDATA[id]]></fieldDescription>
 </field>


 <field name="job" class="java.lang.String">
 <fieldDescription><![CDATA[job]]></fieldDescription>
 </field>


 <field name="name" class="java.lang.String">
 <fieldDescription><![CDATA[name]]></fieldDescription>
 </field>



3_ثم إنشاء مربعات النصوص :


الكود:
<textField>
 <reportElement x="257" y="61" width="100" height="20" uuid="e98f9aaa-93b1-4be2-a7bf-637004d8abfe"/>
 <textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
 </textField>
 <textField>
 <reportElement x="383" y="96" width="100" height="20" uuid="73f60c6d-bc3e-4bfd-8596-31699e98a7ff"/>
 <textFieldExpression><![CDATA[$F{job}]]></textFieldExpression>
 </textField>
 <textField>
 <reportElement x="178" y="78" width="100" height="20" uuid="22419a2d-c4cd-47de-baa1-ac5c8b42f001"/>
 <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
 </textField>



[size=18]ملحوظة :[/size]

يمكنك الاستغناء عن كتابة الشفرات فى الخطوة الثانية و الثالثة اعلاه و إستخدام الواجهة الرسومية لإنشاء حقول البيانات في ملف xml تلقائا  بدون كتابة اى شفرات على النحو التالى :


_استدعاء نافذة Report query

الوسم jtable على المنتدى منتدى مصر التقني 454780793


 _ويتم إستدعاء تلك النافذة أما من خلال النقر على [size=16]ايقونة query[/size] أو من خلال تحديد [size=16]ايقونة [b]التقرير[/size][/b] وبالنقر على رز الفارة الايمن تظهر قائمة فاختر منها Edit Query...لتظهر لك نافذة Report query 


الوسم jtable على المنتدى منتدى مصر التقني 721835210
_ من نافذة  Report query قم بتحديد التويب JavaBeans Datasource ومن خلال مربع النص class Name قم بكتابة اسم ملف JavaBeans ثم قم بالنقر على زر الامر read Attrbutes ليقوم بقراءة الحقول بالملف ثم أضف تلك الحقول للتقرير من خلال النقر على زر الامر add select filde ثم النقر ok كما فى الصورة التالية

الوسم jtable على المنتدى منتدى مصر التقني 977447080


_الان ستجد حقول البيانات الموجودة فى الفئة كما فى الصورة التالية .... يمكنك سحب و إفلات الحقول الثلاثة الى التقرير كما هو موضح فى الصورة التالية :

[size=16]
الوسم jtable على المنتدى منتدى مصر التقني 340922894
[/size]



الخطوة الرابعة :إنشاء مجموعة بيانات التى سيتم تمريرها للتقرير وليكن بإسم fill_Data وذلك على النحو التالى :

الكود:

  private List<Student> data = new LinkedList<Student>();
 
  private  Collection fill_Data()
    {
      Student j = new Student();
     
      j.setId(1);
      j.setName("أحمد مناع");
      j.setJob("محاسب");
     
     
      j.setId(2);
      j.setName("سيد حامد");
      j.setJob("تاجر");
     
     
      j.setId(3);
      j.setName("محمود عبد الغني");
      j.setJob("محاسب");
     
        data.add(j);
        return data;
    }



الخطوة الخامسة :عرض و تشغيل التقرير وذلك بتمرير البيانات التى تم جلبها من مجموعة البيانات fill_Data الى الكائن JRBeanCollectionDataSource على النحو التالى :

الكود:

import java.io.InputStream;
import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;
import img1.Student;
import java.util.LinkedList;
import java.util.List;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

public class NewMain {

  private List<Student> data = new LinkedList<Student>();
 
  private  Collection fill_Data()
    {
      Student j = new Student();
     
      j.setId(1);
      j.setName("أحمد مناع");
      j.setJob("محاسب");
     
     
      j.setId(2);
      j.setName("سيد حامد");
      j.setJob("تاجر");
     
     
      j.setId(3);
      j.setName("محمود عبد الغني");
      j.setJob("محاسب");
     
        data.add(j);
        return data;
    }
   
  public  void FillReport(){
   
           
            try {
               
                //الحصول على مسار التقرير
                InputStream Report =this.getClass().getResourceAsStream("/report/pppp.jasper");
               
                //تعبئة التقرير من قاعدة البيانات باستخدام الكائن JRResultSetDataSource
                JasperPrint jasperPrint = JasperFillManager.fillReport(Report,null,new JRBeanCollectionDataSource(fill_Data()));
               
                //تشغيل وعرض التقرير
                JasperViewer.viewReport(jasperPrint,false);
               
               
            } catch (JRException ex) {
                Logger.getLogger(NewMain.class.getName()).log(Level.SEVERE, null, ex);
            }
 
  }
   
 
    public static void main(String[] args) {
       
      new NewMain().FillReport();
 
    }
}
من طرف أحمد مناع
في الجمعة سبتمبر 20, 2019 9:32 pm
 
ابحث في: إنشاء التقارير JasperReports مع iReport
موضوع: انشاء تقارير JasperReports مع iReport ...مقال 9 _التعامل مع مصادر البيانات_ JavaBeans كمصدر بيانات.
المساهمات: 1
مشاهدة: 257

انشاء تقارير JasperReports مع iReport ...مقال 8 _التعامل مع مصادر البيانات_ TableModels كمصدر للبيانات

أهلا وسهلا بكم إخواني الكرام 

فى مقالات سابقة تحدثنا عن قواعد البيانات وكيفية استخدمها كمصدر للبيانات للتقرير المراد إنشائه وقلنا أن هناك طريقتان لإنشاء تقارير من قاعدة البيانات وهما :


  1. الاولى : بتضمين إستعلامات SQL في قالب تقرير JRXML بسواء عن طريق الشفرة أو عن طريق إستخدام المعالج 

  2. الثانية : بتمرير البيانات من قاعدة البيانات إلى التقرير بإستخدام JRResultSetDataSource


في العديد من التطبيقات ، يتم عرض البيانات بتنسيق جدولي.حيث يتم السماح للمستخدم بطباعة هذا التنسيق الجدولي كتقرير دون الحاجة للتعامل مباشرة مع قاعدة البيانات , فمثلا لغة الجافا توفر الكائن javax.swing.JTable هو مكون رسومي قوي لعرض هياكل البيانات المعقدة فى شكل جدولى يوفر الكائن #Jtable الواجهة #TableModel التى يمكن استخدامها و تمريرها كمعلمة للكائن #JRTableModelDataSource الذى توفر المكتبة JasperReports .

لأن الجداول في Swing يتم ملؤها عبر TableModels ، لذلك فكل ما نحتاج إليه لإنشاء تقرير ديناميكى من  Jtable  هو تمرير TableModel للجدول المناسب كمعلمة كما يلي:
الكود:

asperPrint jasperPrint = JasperFillManager.fillReport(jasperDesign,null,new JRTableModelDataSource(Jtable1.getModel()));


لذلك قبل أن نبدء فى العمل على مثال ندعونا نفترض أن لدينا الجدول التالى كــ JTable 


[size=16]الوسم jtable على المنتدى منتدى مصر التقني 127532907[/size]

الخطوة الاولى : فتح ملف #xml لإنشاء الحقول #field التي سيتم ملؤها في وقت التشغيل من JTableModel لاستخدامها فيما بعد و يجب أن يإخذ أسماء الحقول اسم COLUMN بالاحرف الكبيرة مع وضع رقم فهرس العامود فى #JTableModel .....فمثلا لدى ثلاثة أعمدة فى Jatble وتبدء عملية الفهرسة لتك الاعمدة من الصفر لذلك فإن اسماء الحقول على النحو التالى :



  • COLUMN_0

  • COLUMN_1

  • COLUMN_2


اذن سيتم كتابة الحقول على النحو التالى :

الكود:
 <field name="COLUMN_0" class="java.lang.Integer"/>
<field name="COLUMN_1" class="java.lang.String"/>
<field name="COLUMN_2" class="java.lang.String"/>


[size=16]الخطوة الثانية :[/size]إنشاء العنصر #textField وهو العنصر الرسومي الذى يستخدم في عرض البيانات النصية الديناميكية في التقارير ويتم إنشائة باستخدام التعليمة <textField> بالشفرة التالية :
الكود:
[size=16]
[/size]


<textField>
 <reportElement x="393" y="17" width="100" height="20"/>
 <textFieldExpression><![CDATA[$F{COLUMN_0}]]></textFieldExpression>
</textField>


 <textField>
 <reportElement x="393" y="37" width="100" height="20"/>
 <textFieldExpression><![CDATA[$F{COLUMN_1}]]></textFieldExpression>
 </textField>


 <textField>
 <reportElement x="393" y="57" width="100" height="20"/>
 <textFieldExpression><![CDATA[$F{COLUMN_2}]]></textFieldExpression>
 </textField>





[size=18]ملحوظة :[/size]

يمكنك الاستغناء عن كتابة الشفرات فى الخطوة الاولى و الثانية اعلاه و إستخدام الواجهة الرسومية إنشاء حقول البيانات في ملف xml تلقائا  بدون كتابة اى شفرات على النحو التالى :

_ من نافذة #Report Inspector قم بتحديد  #Fields ثم النقر بزر الفارة الايمن لتظهر لك قائمة أختر منها الامر add Field كما فى الشكل التالى :

الوسم jtable على المنتدى منتدى مصر التقني 552574247

_سيظهر لك حقل باسم #field1 يمكنك تحديدة ومن نافذة الخصائص للحقول غير اسم الحقل بالقيم التالية 

[*]COLUMN_0
[*]COLUMN_1
[*]COLUMN_2

كما فى الصورة التالية :

الوسم jtable على المنتدى منتدى مصر التقني 384586460

_الان يمكن سحب و إفلات الحقول الثلاثة الى التقرير كما أوضحنا سابقا

الخطوة الثالثة والاخيرة :عرض و تشغيل التقرير وذلك بتمرير البيانات التى تم جلبها من JTable باستخدام الكائن TableModels إلى التقرير بتمرير الكائن  #TableModels الى الكائن #JRTableModelDataSource على النحو التالى :

الكود:

import java.io.InputStream;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRTableModelDataSource;
import net.sf.jasperreports.view.JasperViewer;

public class NewMain {

  
    
   public  void FillReport(){
    
                  
            try {
              
                
                //الحصول على مسار التقرير
                InputStream Report =this.getClass().getResourceAsStream("/report/pppp.jasper");
                
                //تعبئة التقرير من قاعدة البيانات باستخدام الكائن  JRTableModelDataSource  
                JasperPrint jasperPrint = JasperFillManager.fillReport(Report,null,new JRTableModelDataSource(jtable1.getModel()));
                
                //تشغيل وعرض التقرير
                JasperViewer.viewReport(jasperPrint,false);
                
                
            } catch (SQLException ex) {
                Logger.getLogger(NewMain.class.getName()).log(Level.SEVERE, null, ex);
            } catch (JRException ex) {
                Logger.getLogger(NewMain.class.getName()).log(Level.SEVERE, null, ex);
            }
            

        
        
      
   }
    
  
    public static void main(String[] args) {
        
       new NewMain().FillReport();
  
    }
}


حيث أن jtable1 هو العنصر الرسومي المراد جلب بياناته كمصدر لبيانات التقرير

الى اللقاء فى درس قادم باذن الله تعالى
من طرف أحمد مناع
في الجمعة سبتمبر 20, 2019 2:09 pm
 
ابحث في: إنشاء التقارير JasperReports مع iReport
موضوع: انشاء تقارير JasperReports مع iReport ...مقال 8 _التعامل مع مصادر البيانات_ TableModels كمصدر للبيانات
المساهمات: 0
مشاهدة: 224

الرجوع الى أعلى الصفحة

انتقل الى: