Java 从另一个类访问jtable
我发现了类似的项目,但我就是不能掌握如何做的概念。我有一个叫做HealthTracker的类,它包含一个JTable。然后我有另一个名为SQL的类,它拥有我所有与SQL相关的方法。其中一个方法称为populateTable。我可以执行查询等操作,但我不知道如何从SQL类访问HealthTracker类中的JTable。下面是我的SQL类中的代码Java 从另一个类访问jtable,java,mysql,swing,jtable,Java,Mysql,Swing,Jtable,我发现了类似的项目,但我就是不能掌握如何做的概念。我有一个叫做HealthTracker的类,它包含一个JTable。然后我有另一个名为SQL的类,它拥有我所有与SQL相关的方法。其中一个方法称为populateTable。我可以执行查询等操作,但我不知道如何从SQL类访问HealthTracker类中的JTable。下面是我的SQL类中的代码 public void populateTable(int qryType){ try{ DefaultTableModel
public void populateTable(int qryType){
try{
DefaultTableModel tblModel = new DefaultTableModel(){
@Override
public boolean isCellEditable(int row, int column){
return false;
}
};
Connection dbconn = SQL.dbConn();
Statement stmt = dbconn.createStatement();
String qry = "SELECT * FROM Services";
ResultSet rs = stmt.executeQuery(qry);
int numCols = rs.getMetaData().getColumnCount();
for (int col = 1; col <= numCols; col++){
tblModel.addColumn(rs.getMetaData().getColumnLabel(col));
}
int row = 0;
while (rs != null && rs.next()){
tblModel.addRow(new Object[0]);
tblModel.setValueAt(rs.getString("ServiceID"), row, 0);
tblModel.setValueAt(rs.getString("Institution"), row, 1);
tblModel.setValueAt(rs.getString("Comments"), row, 2);
row++;
}
rs.close();
// This is the line that gives me the error
HealthTracker.this.tblMain.setModel(tblModel);
} catch (Exception e){
e.printStackTrace();
}
}
让您的
populateTable
方法返回TableModel
的实例,而不是让它尝试将模型应用于JTable
public TableModel populateTable(int qryType) throws SQLException{
DefaultTableModel tblModel = new DefaultTableModel(){
@Override
public boolean isCellEditable(int row, int column){
return false;
}
};
String qry = "SELECT * FROM Services";
try (Connection dbconn = SQL.dbConn();
Statement stmt = dbconn.createStatement();
ResultSet rs = stmt.executeQuery(qry)) {
int numCols = rs.getMetaData().getColumnCount();
for (int col = 1; col <= numCols; col++){
tblModel.addColumn(rs.getMetaData().getColumnLabel(col));
}
int row = 0;
while (rs != null && rs.next()){
tblModel.addRow(new Object[0]);
tblModel.setValueAt(rs.getString("ServiceID"), row, 0);
tblModel.setValueAt(rs.getString("Institution"), row, 1);
tblModel.setValueAt(rs.getString("Comments"), row, 2);
row++;
}
}
return model;
}
publicTableModelPopulateTable(int qryType)抛出SQLException{
DefaultTableModel tblModel=新的DefaultTableModel(){
@凌驾
公共布尔值可编辑(int行,int列){
返回false;
}
};
String qry=“从服务中选择*”;
try(连接dbconn=SQL.dbconn();
语句stmt=dbconn.createStatement();
结果集rs=stmt.executeQuery(qry)){
int numCols=rs.getMetaData().getColumnCount();
例如(int col=1;col让您的populateTable
方法返回TableModel
的实例,而不是让它尝试将模型应用于JTable
public TableModel populateTable(int qryType) throws SQLException{
DefaultTableModel tblModel = new DefaultTableModel(){
@Override
public boolean isCellEditable(int row, int column){
return false;
}
};
String qry = "SELECT * FROM Services";
try (Connection dbconn = SQL.dbConn();
Statement stmt = dbconn.createStatement();
ResultSet rs = stmt.executeQuery(qry)) {
int numCols = rs.getMetaData().getColumnCount();
for (int col = 1; col <= numCols; col++){
tblModel.addColumn(rs.getMetaData().getColumnLabel(col));
}
int row = 0;
while (rs != null && rs.next()){
tblModel.addRow(new Object[0]);
tblModel.setValueAt(rs.getString("ServiceID"), row, 0);
tblModel.setValueAt(rs.getString("Institution"), row, 1);
tblModel.setValueAt(rs.getString("Comments"), row, 2);
row++;
}
}
return model;
}
publicTableModelPopulateTable(int qryType)抛出SQLException{
DefaultTableModel tblModel=新的DefaultTableModel(){
@凌驾
公共布尔值可编辑(int行,int列){
返回false;
}
};
String qry=“从服务中选择*”;
try(连接dbconn=SQL.dbconn();
语句stmt=dbconn.createStatement();
结果集rs=stmt.executeQuery(qry)){
int numCols=rs.getMetaData().getColumnCount();
对于(int col=1;col),这很好,但是我仍然需要能够从其他类访问该JTable。请参阅应用程序首次加载以初始化表时发生的代码,但用户需要能够筛选数据。因此,我创建了一个显示另一个窗口的筛选按钮(SearchRecord.java类)用户可以在其中输入参数,然后单击“查找”。一旦“查找”单击按钮,然后我运行查询,应该用新结果重新加载表。也许我的方法不对?那么?为什么不能在需要时加载正在执行查询的类的另一个实例?但是,您可以利用JTable
s内置的筛选支持,有关更多详细信息,请参阅我想我是这样的做得不对,因为我不能让我刚才添加的代码正常工作。很抱歉我的无知,但这是我第一个关于java的项目。我以前从未做过java。根据您更新的代码,SearchRecord
应该从用户处收集搜索参数,并将其返回给调用者(我假设healthcontracker
)-请参阅以获得更好的解决方案。这样healthcontracker
就可以称您为“数据库实用程序”类,它包含populateTable
方法,该方法的值来自SearchRecord
。职责分离这很好,但是我仍然需要能够从其他类访问该JTable。请参阅此代码,当应用程序首次加载以初始化表时发生,但用户需要能够进行筛选因此,我创建了一个过滤器按钮,显示另一个窗口(SearchRecord.java类),用户可以在其中输入参数,然后单击find单击按钮,然后我运行查询,应该用新结果重新加载表。也许我的方法不对?那么?为什么不能在需要时加载正在执行查询的类的另一个实例?但是,您可以利用JTable
s内置的筛选支持,有关更多详细信息,请参阅我想我是这样的做得不对,因为我不能让我刚才添加的代码正常工作。很抱歉我的无知,但这是我第一个关于java的项目。我以前从未做过java。根据您更新的代码,SearchRecord
应该从用户处收集搜索参数,并将其返回给调用者(我假设HealthTracker
)-请参阅以获得更好的解决方案。这将允许HealthTracker
调用您的“数据库实用程序”类,该类包含populateTable
方法,其值来自SearchRecord
。职责分离