JTable limitazione di riga

Devo limitare il numero di righe in una JTable Se ho 100 record, devo visualizzare 10 sul caricamento iniziale di JTable. Vorrei mettere un pulsante come "next" , e dopo ogni clic mostra un altro set di 10 record.

Devo limitare il numero di righe in una tabella J. Se ho 100 record ho bisogno di visualizzare 10 sul caricamento iniziale di JTable.

Usa dimensioni preferite (+ un layout e un vincolo di layout appropriati) per fissare la dimensione.

Vorrei mettere un pulsante come “next”, e dopo ogni clic mostra un altro set di 10 record.

Rimuovere la barra di scorrimento sul RHS del riquadro di scorrimento. Quindi utilizzare i pulsanti invece per l’effetto di ‘prossimo / precedente’.

Come questo

Tavolo pagabile

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 actionPerformsd(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); } }); } } 

Se si utilizza un AbstractTableModel è ansible visualizzare milioni di record. L’idea è che il tuo modello caricherà tutti i record necessari per la visualizzazione, su richiesta.

Qui hai un tale modello. Non è il mio miglior codice, ma lo farà 🙂 …

 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; } 

Se stai caricando i dati da una tabella di database, penso che il modo migliore per procedere sia limitare i dati provenienti dal database. Quindi applica un semplice algoritmo per i pulsanti successivo e precedente.