الوقت/التاريخ الآن هو الخميس مارس 28, 2024 11:12 pm
2 نتيجة بحث عن TableModel
تجميد اعمدة فى JTable اثناء تمرير jScrollBar
عادة ما يتم عرض #JTable في #JScrollPane. يسمح هذا للجدول بالتمرير عموديًا أو أفقيًا كما هو مطلوب. يؤدي التمرير الأفقي إلى التمرير لكل الأعمدة في الجدول. في بعض الحالات ، قد ترغب في منع العمود (الأعمدة) الأمامية في الجدول من التمرير.لا يدعم JTable هذه الوظيفة ، لكن بالاقتران مع #JScrollPane ، يمكننا تحقيق الوظيفة المطلوبة. يتم استخدام فئة #FixedColumnTable كفئة راحة للتعامل مع الجدول والتمرير. وراء الكواليس ، يتم تقسيم الجدول الرئيسي إلى قسمين. سيعرض الجدول الثاني الأعمدة الثابتة ويضاف إلى رأس صف أجزاء التمرير. سيقوم هذا الجدول الثابت بمشاركة #TableModel و #SelectionModel مع الجدول الرئيسي.
ستقوم بإنشاء الفئة #FixedColumnTable بمجرد إضافة #TableModel إلى الجدول الرئيسي الخاص بك وإضافة الجدول الرئيسي إلى جزء التمرير. ستكون النتيجة عبارة عن جزء تمرير يحتوي على جدولين ، يمكن تمرير جدول واحد فقط أفقيًا. تم استخدام الكود التالي لإنشاء جزء التمرير في الصورة أدناه:
فيما ادناه الشفرة الخاصة بالفئة
- الكود:
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/
- في الخميس نوفمبر 28, 2019 5:52 pm
- ابحث في: واجهة المستخدم الرسومية Java Swing
- موضوع: تجميد اعمدة فى JTable اثناء تمرير jScrollBar
- المساهمات: 0
- مشاهدة: 632
انشاء تقارير JasperReports مع iReport ...مقال 8 _التعامل مع مصادر البيانات_ TableModels كمصدر للبيانات
أهلا وسهلا بكم إخواني الكرامفى مقالات سابقة تحدثنا عن قواعد البيانات وكيفية استخدمها كمصدر للبيانات للتقرير المراد إنشائه وقلنا أن هناك طريقتان لإنشاء تقارير من قاعدة البيانات وهما :
- الاولى : بتضمين إستعلامات SQL في قالب تقرير JRXML بسواء عن طريق الشفرة أو عن طريق إستخدام المعالج
- الثانية : بتمرير البيانات من قاعدة البيانات إلى التقرير بإستخدام 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][/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 كما فى الشكل التالى :
_سيظهر لك حقل باسم #field1 يمكنك تحديدة ومن نافذة الخصائص للحقول غير اسم الحقل بالقيم التالية
[*]COLUMN_0
[*]COLUMN_1
[*]COLUMN_2
كما فى الصورة التالية :
_الان يمكن سحب و إفلات الحقول الثلاثة الى التقرير كما أوضحنا سابقا
الخطوة الثالثة والاخيرة :عرض و تشغيل التقرير وذلك بتمرير البيانات التى تم جلبها من 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
- مشاهدة: 1194
اليوم في 7:09 pm من طرف moslema_r
» شركة تنظيف فرشات بالرياض
الثلاثاء مارس 26, 2024 6:26 pm من طرف moslema_r
» شركة تنظيف استراحات بالرياض
الأحد مارس 24, 2024 10:49 pm من طرف moslema_r
» كشف تسربات المياه في جدة
السبت مارس 23, 2024 7:23 pm من طرف gmalnagy
» خدمات كشف تسربات المياه بخصم 25% - اتصل الان
السبت مارس 23, 2024 7:22 pm من طرف gmalnagy
» شركة تنظيف ثريات بالرياض
الخميس مارس 21, 2024 7:23 pm من طرف moslema_r
» كهربائي منازل بالرياض
الأحد مارس 17, 2024 1:52 pm من طرف رانيا حماد
» افضل شركة نقل عفش بالرياض نقل باكستاني 40% خصم | موقع الانوار
الأحد مارس 17, 2024 1:25 pm من طرف رانيا حماد
» افضل معلم جبس بالرياض تركيب جبس بورد بالرياض 20% خصم اتصل الآن
الأحد مارس 17, 2024 1:09 pm من طرف رانيا حماد
» شراء اثاث مستعمل بالكويت بخصم 30%
الأحد مارس 17, 2024 12:54 pm من طرف رانيا حماد