ترقيم الصفحات فى جدول البيانات Jtable Pagination

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

ترقيم الصفحات فى جدول البيانات  Jtable Pagination Empty ترقيم الصفحات فى جدول البيانات Jtable Pagination

مُساهمة من طرف م/موسي في الأربعاء نوفمبر 20, 2019 10:44 pm

ترقيم الصفحات هو أبسط طريقة  للتعامل مع كمية كبيرة من سجلات قاعدة البيانات. يقوم بتقسيم البيانات إلى عدة أجزاء يمكن التحكم فيها. هنا ، سنقوم بإنشاء صفحات الترحيل وعرض السجلات في JTable باستخدام java swing. عند النقر فوق رؤوس JTable ، سيتم فرز السجلات أيضًا.


ترقيم الصفحات فى جدول البيانات  Jtable Pagination 1815.paging

الكود :

الكود:

import java.awt.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.text.*;
import javax.swing.event.*;
import javax.swing.table.*;
import javax.swing.plaf.basic.*;

public class GridView extends JPanel {
   RadioButtonUI ui = new RadioButtonUI();
   int pageSize = 5;

   Model model = new Model();
   TableRowSorter sorter = new TableRowSorter(model);
   Box box = Box.createHorizontalBox();

   public GridView() {
      super(new BorderLayout());
      JTable table = new JTable(model) {
         public Component prepareRenderer(TableCellRenderer tcr, int row,
               int column) {
            Component c = super.prepareRenderer(tcr, row, column);
            if (isRowSelected(row)) {
               c.setForeground(getSelectionForeground());
               c.setBackground(getSelectionBackground());
            } else {
               c.setForeground(getForeground());
               c.setBackground((row % 2 == 0) ? Color.lightGray
                     : getBackground());
            }
            return c;
         }
      };
      table.setIntercellSpacing(new Dimension());
      table.setShowGrid(false);
      table.setRowSorter(sorter);
      showPages(10, 1);

      add(new JScrollPane(table));
      add(box, BorderLayout.SOUTH);
      setPreferredSize(new Dimension(320, 240));
   }

   private void showPages(final int itemsPerPage, final int currentPageIndex) {
      sorter.setRowFilter(filter(itemsPerPage, currentPageIndex - 1));
      ArrayList l = new ArrayList();

      int startPageIndex = currentPageIndex - pageSize;
      if (startPageIndex <= 0)
         startPageIndex = 1;
      int maxPageIndex = (model.getRowCount() / itemsPerPage) + 1;
      int endPageIndex = currentPageIndex + pageSize - 1;
      if (endPageIndex > maxPageIndex)
         endPageIndex = maxPageIndex;

      if (currentPageIndex > 1)
         l
               .add(createRadioButtons(itemsPerPage, currentPageIndex - 1,
                     "Prev"));
      for (int i = startPageIndex; i <= endPageIndex; i++)
         l.add(createLinks(itemsPerPage, currentPageIndex, i - 1));
      if (currentPageIndex < maxPageIndex)
         l
               .add(createRadioButtons(itemsPerPage, currentPageIndex + 1,
                     "Next"));

      box.removeAll();
      ButtonGroup bg = new ButtonGroup();
      box.add(Box.createHorizontalGlue());
      for (JRadioButton r : l) {
         box.add(r);
         bg.add(r);
      }
      box.add(Box.createHorizontalGlue());
      box.revalidate();
      box.repaint();
      l.clear();
   }

   private JRadioButton createLinks(final int itemsPerPage, final int current,
         final int target) {
      JRadioButton radio = new JRadioButton("" + (target + 1)) {
         protected void fireStateChanged() {
            ButtonModel model = getModel();
            if (!model.isEnabled()) {
               setForeground(Color.GRAY);
            } else if (model.isPressed() && model.isArmed()) {
               setForeground(Color.GREEN);
            } else if (model.isSelected()) {
               setForeground(Color.RED);
            }
            super.fireStateChanged();
         }
      };
      radio.setForeground(Color.BLUE);
      radio.setUI(ui);
      if (target + 1 == current) {
         radio.setSelected(true);
      }
      radio.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            showPages(itemsPerPage, target + 1);
         }
      });
      return radio;
   }

   private JRadioButton createRadioButtons(final int itemsPerPage,
         final int target, String title) {
      JRadioButton radio = new JRadioButton(title);
      radio.setForeground(Color.BLUE);
      radio.setUI(ui);
      radio.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent e) {
            showPages(itemsPerPage, target);
         }
      });
      return radio;
   }

   private RowFilter filter(final int itemsPerPage,
         final int target) {
      return new RowFilter() {
         public boolean include(
               Entry entry) {
            int ei = entry.getIdentifier();
            return (target * itemsPerPage <= ei && ei < target
                  * itemsPerPage + itemsPerPage);
         }
      };
   }

   public static void main(String[] args) {
      JFrame frame = new JFrame("Table");
      frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
      frame.getContentPane().add(new GridView());
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }
}

class RadioButtonUI extends BasicRadioButtonUI {
   public Icon getDefaultIcon() {
      return null;
   }

   private static Dimension size = new Dimension();
   private static Rectangle rec1 = new Rectangle();
   private static Rectangle rec2 = new Rectangle();
   private static Rectangle rec3 = new Rectangle();

   public synchronized void paint(Graphics g, JComponent c) {
      AbstractButton b = (AbstractButton) c;
      ButtonModel model = b.getModel();
      Font f = c.getFont();
      g.setFont(f);
      FontMetrics fm = c.getFontMetrics(f);

      Insets i = c.getInsets();
      size = b.getSize(size);
      rec1.x = i.left;
      rec1.y = i.top;
      rec1.width = size.width - (i.right + rec1.x);
      rec1.height = size.height - (i.bottom + rec1.y);
      rec2.x = rec2.y = rec2.width = rec2.height = 0;
      rec3.x = rec3.y = rec3.width = rec3.height = 0;

      String text = SwingUtilities.layoutCompoundLabel(c, fm, b.getText(),
            null, b.getVerticalAlignment(), b.getHorizontalAlignment(), b
                  .getVerticalTextPosition(), b
                  .getHorizontalTextPosition(), rec1, rec2, rec3, 0);

      if (c.isOpaque()) {
         g.setColor(b.getBackground());
         g.fillRect(0, 0, size.width, size.height);
      }
      if (text == null)
         return;
      g.setColor(b.getForeground());
      if (!model.isSelected() && !model.isPressed() && !model.isArmed()
            && b.isRolloverEnabled() && model.isRollover()) {
         g.drawLine(rec1.x, rec1.y + rec1.height, rec1.x + rec1.width,
               rec1.y + rec1.height);
      }
      View v = (View) c.getClientProperty(BasicHTML.propertyKey);
      if (v != null) {
         v.paint(g, rec3);
      } else {
         paintText(g, b, rec3, text);
      }
   }
}

class Model extends DefaultTableModel {
   Model() {
      JTable table = new JTable(this);
      addColumn("Name");
      addColumn("Address");
      try {
         Class.forName("com.mysql.jdbc.Driver").newInstance();
         Connection con = DriverManager.getConnection(
               "jdbc:mysql://localhost:3306/register", "root", "root");
         String query = "select * from data";
         Statement st = con.createStatement();
         ResultSet rs = st.executeQuery(query);

         while (rs.next()) {
            String name = rs.getString("name");
            String address = rs.getString("address");
            addRow(new Object[] { name, address });
         }
      } catch (Exception e) {
      }
   }
}
م/موسي
م/موسي
الاشراف
الاشراف

تاريخ التسجيل : 18/02/2011
المساهمات : 173
النقاط : 337
التقيم : 12
الدولة : تونس
الجنس : ذكر

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

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

ََ

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


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