Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用2个不同的类刷新Jtable?_Java_Mysql_Database_Jtable - Fatal编程技术网

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

Java 如何使用2个不同的类刷新Jtable?,java,mysql,database,jtable,Java,Mysql,Database,Jtable,我正在做一个学校项目,在那里我正在构建一个小程序 我遇到了一个我无法解决的问题,我有两个班 第一个类i非常简单,它包含为表列返回字符串数组的方法和返回日期的对象 第二个类中有一些方法。。。它们都返回一个组件,该组件是一个表,该表在不同的类中用于显示例如客户事务等 一切正常,但表没有更新 从firetablechange等我都试过了。。。。但是什么都没用 头等舱: import java.sql.ResultSetMetaData; public class tableData extends

我正在做一个学校项目,在那里我正在构建一个小程序

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

第一个类i非常简单,它包含为表列返回字符串数组的方法和返回日期的对象

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

一切正常,但表没有更新

从firetablechange等我都试过了。。。。但是什么都没用

头等舱:

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;
    }
}
您可以重置表的模型,也可以创建一种智能方法来检查表中的更改,并相应地插入/更新/删除相应的行


我还想为这个问题添加swing标记。

只需使用
新计时器(设置刷新时间,actionlisterner)
然后告诉d actionlisterner在指定的时间做什么。但缺点是,如果刷新太快,它将返回一个异常,表示连接太多。但是它可以工作。

重置模型时会发生什么?我认为dispustAccInfo()方法应该返回表模型(而不是表),并且应该将模型设置为只创建一次的JTable
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
    }
}
DefaultTableModel m=new DefaultTableModel (td.dataTable(custID, sql), td.colNamesTable(custID, sql));

table.setModel(m);