Java DefaultDataTable动态值

时间:2016-09-20 08:17:47

标签: java swing jtable defaulttablemodel

我有一个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]]}这对我来说很好,但正如我之前所说,它只是将它作为数组附加而不是一个数组 - 新行。

1 个答案:

答案 0 :(得分:0)

我建议您使用向量创建自己的 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块,但你可以修复并添加它们:)