JTable行限制

我必须限制JTable的行数。 如果我有100条记录,我需要在初始加载JTable时显示10条。 我想放一个像"next"的按钮,每次点击后它会显示另一组10条记录。

我必须限制JTable中的行数。 如果我有100条记录,我需要在初始加载JTable时显示10条。

使用首选大小(+适当的布局和布局约束)来修复大小。

我想放一个像“下一个”的按钮,每次点击后它会显示另一组10条记录。

删除滚动窗格的RHS上的滚动条。 然后使用按钮代替“下一个/上一个”的效果。

喜欢这个

可分页表

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

如果使用AbstractTableModel ,则可以显示数百万条记录。 我们的想法是,您的模型将根据需要加载视图所需的任何记录。

在这里你有这样一个模型。 这不是我最好的代码,但会做:-) …

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

如果从数据库表加载数据,我认为最好的方法是限制来自数据库的数据。 然后为下一个和上一个按钮应用一个简单的算法。