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