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

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

اذهب الى الأسفل

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

مُساهمة من طرف NEXT الخميس نوفمبر 28, 2019 5:52 pm

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

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

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

TableModel - تجميد اعمدة فى JTable اثناء تمرير jScrollBar 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/

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
TableModel - تجميد اعمدة فى JTable اثناء تمرير jScrollBar Do.php?imgf=154090993464951
NEXT
NEXT
الادارة
الادارة

تاريخ التسجيل : 18/02/2011
المساهمات : 446
النقاط : 200660
التقيم : 28
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى