Java 从查询更新JTable
目前我有一个DerbyDB和一个带有JTable的UI。现在我也有很多类,但是我需要帮助的是Java 从查询更新JTable,java,swing,user-interface,jtable,derby,Java,Swing,User Interface,Jtable,Derby,目前我有一个DerbyDB和一个带有JTable的UI。现在我也有很多类,但是我需要帮助的是SensorDBConnection和myUImyUI是我的JTable所在的位置,我想做的是从位于我的SensorDBConnection 以下是我的SensorDBConnection中的一个片段,它之所以有效,是因为它正在执行System.outs DefaultTableModel model;//Confused model = new DefaultTableModel(); //Co
SensorDBConnection
和myUI
myUI
是我的JTable所在的位置,我想做的是从位于我的SensorDBConnection
以下是我的SensorDBConnection
中的一个片段,它之所以有效,是因为它正在执行System.outs
DefaultTableModel model;//Confused
model = new DefaultTableModel(); //Confused
jTable1 = new JTable(model);//Confused
model.addColumn("TIME");
model.addColumn("SENSORID");
model.addColumn("TEMP");
model.addColumn("HUM");
model.addColumn("LIGHT");
model.addColumn("VOLTAGE");
while(results.next())
{
time = results.getInt(1);
id = results.getInt(2);
temp = results.getInt(3);
hum = results.getInt(4);
light = results.getInt(5);
voltage = results.getInt(6);
model.addRow(new Object[]{time,id,temp,hum,light,voltage});
Sensor sens = new Sensor(id, temp, hum, light, voltage);
sensors.add(sens);
//System.out.println(sens);
}
results.close();
stmt.close();
因此,我现在做的基本上是查询我的数据,然后尝试将其推送到另一个类上的JTabel,我不知道如何创建它们之间的链接。如果我正确理解了您的问题,您应该能够在myUI中创建SensorDBConnection的实例。这样,您可以调用方法、查询等。。。myUI中的SensorDBConnection。从将UI与数据管理分离开始。与其让
SensorDBConnection
返回TableModel
,不如让它返回构建数据模型所需的数据
例如
public class SensorDBConnection extends ... {
public List<Sensor> loadData() {
List<Sensor> sensors = new ArrayList<>(25);
try {
//...
while(results.next())
{
time = results.getInt(1);
id = results.getInt(2);
temp = results.getInt(3);
hum = results.getInt(4);
light = results.getInt(5);
voltage = results.getInt(6);
model.addRow(new Object[]{time,id,temp,hum,light,voltage});
Sensor sens = new Sensor(id, temp, hum, light, voltage);
sensors.add(sens);
}
} finally {
try {
results.close();
} catch (Exception exp) {
}
try {
stmt.close();
} catch (Exception exp) {
}
}
return sensors;
}
}
然后在MyUI
类中从SensorDBConnection
调用loadData
方法,只需创建TableModel的一个实例,并将其应用于您已经拥有的JTable`实例
public class MyUI extends ... {
private JTable table;
private SensorDBConnection sensor;
//...
protected void loadTableContents() {
TableModel model = null;
try {
model = new SensorTableModel(sensor.loadData());
} catch (SQLException exp) {
// Handle exception
}
table.setModel(model);
}
}
例如…我将创建自己的TableModel子类,该子类特定于返回的数据。然后,一旦您将TableModel中的数据设置为新数据,请调用fireTableDataChanged()。好的,让我继续并通过google了解如何做到这一点。。谢谢你的回复,谢谢!我试试看
public class SensorDBConnection extends ... {
public List<Sensor> loadData() {
List<Sensor> sensors = new ArrayList<>(25);
try {
//...
while(results.next())
{
time = results.getInt(1);
id = results.getInt(2);
temp = results.getInt(3);
hum = results.getInt(4);
light = results.getInt(5);
voltage = results.getInt(6);
model.addRow(new Object[]{time,id,temp,hum,light,voltage});
Sensor sens = new Sensor(id, temp, hum, light, voltage);
sensors.add(sens);
}
} finally {
try {
results.close();
} catch (Exception exp) {
}
try {
stmt.close();
} catch (Exception exp) {
}
}
return sensors;
}
}