تجميد اعمدة فى JTable اثناء تمرير jScrollBar
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: واجهة المستخدم الرسومية Java Swing
صفحة 1 من اصل 1 • شاطر
تجميد اعمدة فى JTable اثناء تمرير jScrollBar
عادة ما يتم عرض #JTable في #JScrollPane. يسمح هذا للجدول بالتمرير عموديًا أو أفقيًا كما هو مطلوب. يؤدي التمرير الأفقي إلى التمرير لكل الأعمدة في الجدول. في بعض الحالات ، قد ترغب في منع العمود (الأعمدة) الأمامية في الجدول من التمرير.
لا يدعم JTable هذه الوظيفة ، لكن بالاقتران مع #JScrollPane ، يمكننا تحقيق الوظيفة المطلوبة. يتم استخدام فئة #FixedColumnTable كفئة راحة للتعامل مع الجدول والتمرير. وراء الكواليس ، يتم تقسيم الجدول الرئيسي إلى قسمين. سيعرض الجدول الثاني الأعمدة الثابتة ويضاف إلى رأس صف أجزاء التمرير. سيقوم هذا الجدول الثابت بمشاركة #TableModel و #SelectionModel مع الجدول الرئيسي.
ستقوم بإنشاء الفئة #FixedColumnTable بمجرد إضافة #TableModel إلى الجدول الرئيسي الخاص بك وإضافة الجدول الرئيسي إلى جزء التمرير. ستكون النتيجة عبارة عن جزء تمرير يحتوي على جدولين ، يمكن تمرير جدول واحد فقط أفقيًا. تم استخدام الكود التالي لإنشاء جزء التمرير في الصورة أدناه:

فيما ادناه الشفرة الخاصة بالفئة
ويتم استخدام الفئة التى تم إنشائها اعلاه على النحو التالى :
المصدر https://tips4java.wordpress.com/2008/11/05/fixed-column-table/
لا يدعم 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/
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ

NEXT- الادارة
- تاريخ التسجيل : 18/02/2011
المساهمات : 446
النقاط : 200660
التقيم : 28
الدولة :
الجنس :
| |
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: واجهة المستخدم الرسومية Java Swing
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى
» مدرس رياضيات متوسط ثانوي 97234924 بالكويت
» أفضل موقع تأجير سيارات في مصر
» مدرس رياضيات متوسط ثانوي 97234924 بالكويت
» شركة آي بي إس للخدمات الاستشارية المالية وتكنولوجيا المعلومات
» ادارة متجرك الالكتروني
» مدرس انجليزي متوسط ثانوي 97234912 بالكويت
» شركة IBS للاستشارات الاقتصادية والادارية
» أحصل ملبغ مالى "رمزي " نظير مشاركاتك و مقالاتك بالمنتدي
» "أحلامنا المرآة: فك رموزها واستكشاف عمق المعاني"