java - 将 firebase 数据放入 JTable
问题描述
我正在努力将一些 firebase 数据放入 java swing 中的 jtable 中。如图所示,我已经能够从 firebase 检索数据,但由于某种原因,数据不会显示在 JTable 字段(table1)中,我看起来像 getID()、getName()... 方法没有t 得到任何值,因为我试图打印 row[i] 以查看是否有任何值。
你们中的任何人都可以告诉你有什么问题吗?
addNewCaseButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
database = FirebaseDatabase.getInstance();
ref = database.getReference("NewCases");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println(dataSnapshot.getValue());
ArrayList<Object[]> myList = new ArrayList<>();
DefaultTableModel tableModel = (DefaultTableModel) table1.getModel();
tableModel.addColumn("ID");
tableModel.addColumn("Name");
tableModel.addColumn("Age");
tableModel.addColumn("City");
tableModel.addColumn("TimeStamp");
tableModel.addColumn("Disease");
tableModel.addColumn("Risk");
Object[] row = new Object[6];
tableModel.setNumRows(0);
myList.clear();
CasesList casesList = new CasesList();
for (DataSnapshot ds : dataSnapshot.getChildren()){
casesList.setID((Integer)ds.child("ID").getValue());
casesList.setName(ds.child("Name").getValue().toString());
casesList.setAge((Integer)ds.child("Age").getValue());
casesList.setCity(ds.child("City").getValue().toString());
casesList.setTimeStamp(ds.child("TimeStamp").getValue().toString());
casesList.setDisease(ds.child("Disease").getValue().toString());
casesList.setRisk(ds.child("Risk").getValue().toString());
// myList.add(ds.getKey());
row[0] = casesList.getID();
row[1] = casesList.getName();
row[2] = casesList.getAge();
row[3] = casesList.getCity();
row[4] = casesList.getTimeStamp();
row[5] = casesList.getDisease();
row[6] = casesList.getRisk();
myList.add(row);
System.out.println(myList);
tableModel.addRow(row);
}
table1.setModel(tableModel);
提前致谢!
解决方案
您是否使用这样的行定义了表格列?
DefaultTableModel tableModel = new DefaultTableModel();
tableModel.addColumn("ID");
tableModel.addColumn("Name");
tableModel.addColumn("Age");
此外,该方法setModel
应在 for 之后调用:
for... {
//add row to tableModel
}
table1.setModel(tableModel);
编辑:
更详细地分析,我还验证您有 7 个字段,但您的数组只有 6 个字段。在此行row [6] = casesList.getRisk ();
中,在运行时引发异常。扩大数组的大小来解决这个问题。
Object[] row = new Object[7];
要显示列名,将表格添加到滚动面板很方便。
JScrollPane scrollPane = new JScrollPane(table1);
frame.getContentPane().add(scrollPane);
这对我有用:
ArrayList<Object[]> myList = new ArrayList<>();
DefaultTableModel tableModel = (DefaultTableModel) table1.getModel();
tableModel.addColumn("ID");
tableModel.addColumn("Name");
tableModel.addColumn("Age");
tableModel.addColumn("City");
tableModel.addColumn("TimeStamp");
tableModel.addColumn("Disease");
tableModel.addColumn("Risk");
Object[] row = new Object[7];
tableModel.setNumRows(0);
myList.clear();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
CasesList casesList = new CasesList();
casesList.setID((Integer) ds.child("ID").getValue());
casesList.setName(ds.child("Name").getValue().toString());
casesList.setAge((Integer) ds.child("Age").getValue());
casesList.setCity(ds.child("City").getValue().toString());
casesList.setTimeStamp(ds.child("TimeStamp").getValue().toString());
casesList.setDisease(ds.child("Disease").getValue().toString());
casesList.setRisk(ds.child("Risk").getValue().toString());
row[0] = casesList.getID();
row[1] = casesList.getName();
row[2] = casesList.getAge();
row[3] = casesList.getCity();
row[4] = casesList.getTimeStamp();
row[5] = casesList.getDisease();
row[6] = casesList.getRisk();
myList.add(row);
System.out.println(myList);
tableModel.addRow(row);
}
table1.setModel(tableModel);
推荐阅读
- angular - 未捕获(承诺中):错误:./BaPageTop 类 BaPageTop 中的错误 - 内联模板:49:4 原因:无法读取 null 的属性“焦点”
- xcode - 查找和删除 Xcode beta 标记
- linux - 构建与 uchar.h 文件和 ICU 版本相关的训练工具时出现 Tesseract 错误
- node.js - IBM Cloud Object Storage nodejs 认证
- c - 是否可以使用目录流重命名 C 中的文件?
- angular - 运行“ionic cordova build android --prod --release”时出现 HTML 错误
- ionic-framework - 我正在制作一个相机应用程序,当相机像 lenkart 一样打开时我需要白框有没有办法在 ionic 中做到这一点
- javascript - JSON 值转换为 URL
- r - R 中 data.table 的 colnames() 行为
- django - 为什么这个 group by 不按我想要或期望的方式工作