首页 > 解决方案 > 将 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);

提前致谢!

标签: javafirebaseswingfirebase-realtime-databasejtable

解决方案


您是否使用这样的行定义了表格列?

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);

推荐阅读