一个JTable,初始显示为10行(是空行).现在想要把一条记录插入JTable中,并且满足: 1.每次插入的记录要放入JTable的顶端; 2.当插入的记录小于10条时,JTable的行数保持不变,记录超过10条时,JTable的行数才可以相应的增加. 大概需要怎么做呢? 

解决方案 »

  1.   

    把数据做成类的属性,把该类的实例保存到 list 中 。然后再TableModel里面setValueAt(),行数随list.size()变化。 问题1.从list的最后一个往前读。    2.public int getRowCount() {
    if(list.size()<=10){
                         return 10;
                    }else{return list.size();}
    }你试试。。
      

  2.   

    自己设计model
    如DefaultTableModel model = new DefaultTableModel(new java.lang.Object [][] {            },
                new String [] {
                    "学号", "名字", "性别", "C 语言成绩", "Java成绩", "英语", "分布式成绩"
                });
     jTableContent.setModel(model);
     jScrollPane1.setViewportView(jTableContent);当插入的记录小于10条时,JTable的行数保持不变,记录超过10条时,JTable的行数才可以相应的增加.
    这些你都可以在model中完成,model.addRow等方法
      

  3.   

    创建table:DefaultTableModel model = new DefaultTableModel(new Object[] {
    "column1",
    "column2" }, 10) { @Override
    public int getRowCount() {
    if (dataVector.size() <= 10) {
    return 10;
    } else {
    return dataVector.size();
    }
    } };
    JTable table = new JTable(model);
    插入新行到表格最开始:model.insertRow(0, new Object[] {"1", "2"});
      

  4.   

    刚才那代码有问题,下面给个测试通过的代码:/**
     * JTableDemo.java
     *
     * Created at 2008-4-19 下午12:28:41
     */
    package demo.jxl;import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Vector;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;/**
     * @author icechen
     * 
     */
    public class JTableDemo extends JPanel {
    private DefaultTableModel model; private JTable table; public JTableDemo() {
    super(new BorderLayout());
    model = new DefaultTableModel(new Object[] {
    "column1",
    "column2",
    "column3" }, 10) { @Override
    public void insertRow(int row, Vector rowData) {
    super.insertRow(row, rowData);
    Vector lastRowData = (Vector) dataVector.elementAt(dataVector.size() - 1);
    if (lastRowData == null
    || lastRowData.elementAt(0) == null) {
    removeRow(dataVector.size() - 1);
    } }
    };
    table = new JTable(model); JButton button = new JButton("insert to first row");
    button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
    model.insertRow(0, new Object[] {
    "1",
    "2",
    "3" });
    } });
    add(button, BorderLayout.PAGE_START);
    add(new JScrollPane(table), BorderLayout.CENTER);
    } private static void createAndShowGUI() {
    JFrame frame = new JFrame("demo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(new JTableDemo(), BorderLayout.CENTER);
    frame.pack();
    frame.setVisible(true);
    } /**
     * @param args
     */
    public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() {
    createAndShowGUI();
    } });
    }}
      

  5.   

    另外做如下修改可以看到显著的效果:第一列显示的内容就是你操作的次数:button.addActionListener(new ActionListener() {

    private int count; public void actionPerformed(ActionEvent e) {
    model.insertRow(0, new Object[] {
    ++count,
    "2",
    "3" });
    } });