JTable Zeilenbeschränkung

Ich muss die Anzahl der Zeilen in einer JTable . Wenn ich 100 Datensätze habe, muss ich beim ersten Laden von JTable 10 anzeigen. Ich möchte einen Knopf wie "next" , und nach jedem Klick zeigt es einen weiteren Satz von 10 Datensätzen.

   

Ich muss die Anzahl der Zeilen in einer JTable begrenzen. Wenn ich 100 Datensätze habe, muss ich beim ersten Laden von JTable 10 anzeigen.

Verwenden Sie die bevorzugte Größe (+ eine entsprechende Layout- und Layoutbeschränkung), um die Größe zu korrigieren.

Ich möchte einen Button wie “next” setzen und nach jedem Klick einen weiteren Satz von 10 Datensätzen anzeigen.

Entfernen Sie die Bildlaufleiste auf der rechten Seite des Bildlauffensters. Verwenden Sie dann stattdessen Tasten, um den Effekt von “next / previous” anzuzeigen.

So was

Belegbare Tabelle

FixedRowsTable.java

 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; class FixedRowsTable { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { String[] columns = {"1","2","3","4","5","6","7"}; Integer[][] data = new Integer[1000][columns.length]; for (int xx=0; xx"); next.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent ae) { int height = table.getRowHeight()*(rows-1); JScrollBar bar = scrollPane.getVerticalScrollBar(); bar.setValue( bar.getValue()+height ); } } ); JButton previous = new JButton("< "); previous.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent ae) { int height = table.getRowHeight()*(rows-1); JScrollBar bar = scrollPane.getVerticalScrollBar(); bar.setValue( bar.getValue()-height ); } } ); navigation.add(previous); navigation.add(next); gui.add(scrollPane, BorderLayout.CENTER); gui.add(navigation, BorderLayout.SOUTH); JOptionPane.showMessageDialog(null, gui); } }); } } 

Wenn Sie ein AbstractTableModel verwenden , können Sie Millionen von Datensätzen anzeigen. Die Idee ist, dass Ihr Modell bei Bedarf die für die Ansicht erforderlichen Datensätze lädt.

Hier haben Sie ein solches Modell. Es ist nicht mein bester Code, aber werde es tun 🙂 …

 public class SomeTableModel extends AbstractTableModel { public SomeTableModel(ResultSet rs) { this.rs = rs; try { pos = this.rs.getRow(); System.out.println(String.valueOf(pos)); } catch (SQLException ex) { JOptionPane.showMessageDialog(null, ex); } } public int getRowCount() { int cnt = 0; int apos = 0; try { apos = rs.getRow(); rs.last(); cnt = rs.getRow(); if (apos > 0) rs.absolute(apos); } catch (SQLException ex) { System.out.println("getRowCount: " + ex); } return cnt; } public int getColumnCount() { return 3; } public Object getValueAt(int rowIndex, int columnIndex) { // make it jump back to pos !! Object val = null; Integer intVal; try { if (rowIndex == 0) { pos = rs.getRow(); total = getRowCount(); } rs.absolute(rowIndex + 1); switch (columnIndex) { case 0: intVal = rs.getInt(1); val = intVal; break; case 1: val = rs.getString(2); break; case 2: val = rs.getString(3); break; default: val = "error"; } rs.absolute(pos); } catch (SQLException sqle) { JOptionPane.showMessageDialog(null, "Trouble in model"); } return val; } private ResultSet rs; private int pos, total; } 

Wenn Sie die Daten aus einer databasetabelle laden, sollten Sie die Daten, die aus der database kommen, am besten beschränken. Wenden Sie dann einen einfachen Algorithmus für die nächste und vorherige Schaltfläche an.