如何使用2个不同的类刷新Jtable?

时间:2011-05-11 13:29:41

标签: java mysql database jtable

我正在开展一个学校项目,我正在建立一个小程序..

我遇到了一个我无法解决的问题,我有2个班级......

第一个类我非常简单,它有返回表列的字符串数组的方法和返回日期的Object ..

第二个类中有一些方法...它们都返回一个组件,它是一个表,并且该表用于不同的类来显示例如客户事务等。

一切正常但桌子没有更新?

我已尝试过firetablechange etcetc ....但没有任何工作......

头等舱:

import java.sql.ResultSetMetaData;

public class tableData extends CustFunk {

    public String[] colNamesTable(long custID, String query) {
        ResultSetMetaData rsmd = null;
        String[] colNames = null;

        try {

            resultSet = statement.executeQuery(query);
            rsmd = resultSet.getMetaData();
            colNames = new String[rsmd.getColumnCount()];

            for (int j = 0; j < rsmd.getColumnCount(); j++) {

                colNames[j] = rsmd.getColumnName(j + 1);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return colNames;
    }

    public Object[][] dataTable(long custID, String query) {

        ResultSetMetaData rsmd = null;
        Object[][] data = null;

        try {

            resultSet = statement.executeQuery(query);

            rsmd = resultSet.getMetaData();

            int rows = 0;
            while (resultSet.next()) {
                rows++;
            }

            resultSet.beforeFirst();
            data = new Object[rows][rsmd.getColumnCount()];

            for (int i = 0; i < rows; i++) {
                resultSet.next();
                for (int j = 0; j < rsmd.getColumnCount(); j++) {
                    data[i][j] = resultSet.getObject(j + 1);
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return data;
    }
}

第二课

public class TableClass {

    private JTable table;
    private tableData td;

    public Component displCustAccInfo(long custID, int x, int y, int width,
        int height) {
        td = new tableData();

        String sql = "SELECT accounts.Account_Name, accounts.Saldo, "
            + "useraccounts.Account_NR"
            + " from Accounts "
            + "INNER JOIN useraccounts on accounts.Account_NR=useraccounts.Account_NR"
            + " AND useraccounts.Kunde_id=" + custID + ";";

        table = new JTable(td.dataTable(custID, sql), td.colNamesTable(custID,
            sql)) {

            public boolean isCellEditable(int row, int column) {
                return false;
            }
        };

        //table.tableChanged(new TableModelEvent(table.getModel())); 

        table.setFont(new Font("Lucida Grande", Font.PLAIN, 14));
        table.setBackground(UIManager.getColor("CheckBoxMenuItem.selectionBackground"));
        table.setForeground(Color.WHITE);
        table.setBounds(x, y, width, height);

        return table;
    }
}

private class BtUpdateActionListener implements ActionListener {

    public void actionPerformed(ActionEvent arg0) {
        and from my customer GUI i call the method:
        TableClass 
        tc = new TableClass();
        tc.displCustAccInfo(custID, 154, 550, 357, 91
    }
}

2 个答案:

答案 0 :(得分:1)

DefaultTableModel m=new DefaultTableModel (td.dataTable(custID, sql), td.colNamesTable(custID, sql));

table.setModel(m);

您可以重置表的模型,或者您必须创建一种智能方法来清除表中的更改并相应地插入/更新/删除相应的行。

此外,我还会为问题添加swing标签。

答案 1 :(得分:1)

只需使用new timer(set refresh time,actionlisterner)然后告诉d actionlisterer在指定的时间做什么。但是退回的是,如果刷新太快,它将返回一个说明连接太多的异常。但它确实有效。