Java-如何在JTable上动态初始化行?

时间:2011-12-14 08:11:04

标签: java swing jtable

我想将mysql表内容与JTable绑定。我成功连接了。我将表格行和宽度设置为500.它将显示500行,包括数据和空。现在我想只查看数据。我不想查看空行。

请帮帮我

插入方法getRowCountFromDB()后,我的应用程序变慢了。

class AbstractTableEmployee extends AbstractTableModel {

    int row2;

    private String[] columnNames = { "ID", "Name", "Company", "Department", "Location", "Mobile NO" , "Shift" };
    private Object[][] data =  new Object[500][500];


    public int getColumnCount() {
        return columnNames.length;
    }

    public int getRowCount() {
        int row = 0;
        try {
            row =  this.count();
        } catch (SQLException ex) {
            Logger.getLogger(AbstractTableEmployee.class.getName()).log(Level.SEVERE, null, ex);
        }
        return row;
    }

    public String getColumnName(int col) {
        return columnNames[col];
    }

    public Object getValueAt(int row, int col) {
        return data[row][col];
    }

    public void setValueAt(Object value, int row, int col) {
        data[row][col] = value;
        fireTableCellUpdated(row, col);
    }
    private int getRowCountFromDB() throws SQLException {
        Connection con  = (Connection) DBConnection.getDBConnection();
        int row = 0;
        Statement st = null;
        ResultSet rs = null;
        String Sql = "Select * from Employee_Master where status = 'Active'";
        try {
            st = (Statement) con.createStatement();
            rs = st.executeQuery(Sql);
            while (rs.next())
            {
                row++;
            }
        }
        finally {
            con.close();
            rs.close();
            st.close();
        }
        return row;


    }

    private int count() throws SQLException {
        return this.getRowCountFromDB();
    }
}

提前致谢。

2 个答案:

答案 0 :(得分:3)

JTable的文档提供了以下有关如何将表与自定义表模型一起使用的示例。

TableModel dataModel = new AbstractTableModel() {
    public int getColumnCount() { return 10; }
    public int getRowCount() { return 10;}
    public Object getValueAt(int row, int col) { return new Integer(row*col); }
};
JTable table = new JTable(dataModel);
JScrollPane scrollpane = new JScrollPane(table);

这是您必须提供的最小实现。

修改

有关如何有效获取行计数的信息,请参阅MySQL参考中的3.3.4.8 Counting Rows。在我看来,当你想要的只是一个数字时,你正在拿整张桌子。

你想要的东西是

Select COUNT(*) from Employee_Master where status = 'Active'

然后只是阅读那个价值。

至于你的data,我认为没有理由让它有500列,因为你的表似乎只有7列。

无论如何,根据表的大小,您可能不希望同时拥有所有数据。如果是这种情况,您可以根据用户滚动的JTable中的位置始终获取和缓存行的块。您可以使用LIMIT

对于其他一些想法和提示,您还应该看一下涵盖类似问题的question

答案 1 :(得分:2)

正如另一张海报所提到的更好,之前会阅读JTable教程,因为文字中的一点点加密,你的方法是JTable#setValueAt(Object aValue, int row, int column)