تجميد اعمدة فى 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
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى
أمس في 5:56 am من طرف wdqwd
» افضل شركة تنظيف شقق بالرياض
الخميس مايو 09, 2024 5:54 pm من طرف moslema_r
» تطبيق جوال لصيانة المكيفات
الأربعاء مايو 08, 2024 6:58 am من طرف mona mohamed
» مظلات وسواتر الرياض
الثلاثاء مايو 07, 2024 7:47 pm من طرف moslema_r
» شركة تنظيف فلل بالرياض
الثلاثاء مايو 07, 2024 6:55 pm من طرف moslema_r
» شركة تنظيف كنب بالرياض
الأحد مايو 05, 2024 6:56 pm من طرف moslema_r
» مظلات وسواتر
السبت مايو 04, 2024 8:58 pm من طرف moslema_r
» شركة تنظيف خزانات بالرياض
الخميس مايو 02, 2024 6:10 pm من طرف moslema_r
» افضل شركة رش مبيدات بالرياض
الإثنين أبريل 29, 2024 9:00 pm من طرف moslema_r
» ارخص شركة مكافحة الصراصير بالرياض
الخميس أبريل 25, 2024 8:56 pm من طرف moslema_r