الوقت/التاريخ الآن هو الثلاثاء أبريل 13, 2021 8:15 am

1 نتيجة بحث عن SelectionModel

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

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

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

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

الوسم selectionmodel على المنتدى منتدى مصر التقني 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
مشاهدة: 266

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

انتقل الى: