Java DefaultDataTable 动态值

Java DefaultDataTable dynamic values

我有一个 JTable,我想使用 DefaultTableModel 来填充,不幸的是,我的输出是数组,而不是我希望的新行。请在下面查看我的代码,并询问是否需要任何进一步的解释! :)

dataTable.setModel(new javax.swing.table.DefaultTableModel(new Object [][] {
                    DatabaseInteraction.getCityInfo("").get("datas").toArray()

            },
                    DatabaseInteraction.getCityInfo("").get("columns").toArray()));

这里是数据库交互函数:

public static Map<String,List<String>> getCityInfo(String query )
{
    if(query.isEmpty()){
        query = "SELECT * FROM "+ database+ "." +table;
    }

    try {
        Statement stmt = getConn().createStatement();
        ResultSet rs;
        rs = stmt.executeQuery(query);
        ResultSetMetaData rsmd = rs.getMetaData();


        //Get Column names
        List<String> cNames = new ArrayList();
        List<Object> results = new ArrayList<Object>();

        for (int i = 1; i <= rsmd.getColumnCount(); i++){
            cNames.add(rsmd.getColumnName(i));
        }

        //Get Data
        while (rs.next()) {
            List<String> tempResults = new ArrayList();

            for (int i = 1; i <= rsmd.getColumnCount(); i++) {
                tempResults.add(rs.getString(i));

                if(i == rsmd.getColumnCount()){
                    results.add(tempResults);

                }

            }
        }


        HashMap map =new HashMap();
        map.put("columns",cNames);
        map.put("datas",results);
        System.out.println(map);
        return map;

    }

我在控制台中得到的输出是:{columns=[username, password, free], datas=[[hej, hej, 1], [Brugernavn, Password, 1], [Brugernavn1, Password, 0 ], [test1, test2, 1], [ , 1]]} 这对我来说很好,但正如我之前所说,它只是将它附加为数组而不是一个数组 - 新行。

我建议您使用 Vectors 创建自己的 DefaultTableModel。 您可以使用类似的东西:

public static DefaultTableModel createModel(ResultSet rs){
   DefaultTableModel dtm = new DefaultTableModel();
   Vector rowVectors = new Vector();
   Vector columnHeaderVector = new Vector();

     //To get rows correctly
     int columncount = rs.getMetaData().getColumnCount();

     //Iterating all data and creating rows vector
     while(rs.next())
     {
         //It seems confusing to newbies,
         //for defaultTableModel we need a vector containing rows(as a vector)
         Vector singleRow = new Vector();
         for(int i=1;i<=columncount;i++)
         {
             singleRow.addElement(rs.getObject(i));
         }
         rowVectors.addElement(singleRow);
     }

     //Creating header for table
     for(int i=1;i<=columncount;i++)
     {
         columnHeaderVector.addElement(rs.getMetaData().getColumnName(i));
     }

   //Setting vectors to the model
   dtm.setDataVector(rowVectors, columnHeaderVector);
   return dtm;      }

在您的主要方法中或您创建 JTable 的地方

ResultSet rs;
rs = stmt.executeQuery(query);
DefaultTableModel dtm = createModel(rs);
dataTable.setModel(dtm);

我在这里写的可能有一些错误,应该也是 try/catch 块,但你可以修复并添加它们:)