2016-09-20 2 views
0

J'ai un JTable que je voudrais remplir en utilisant le DefaultTableModel malheureusement ma sortie se présente sous forme de tableaux et non comme de nouvelles lignes comme je le voudrais. S'il vous plaît voir mon code ci-dessous et demandez si d'autres explications sont nécessaires! :)Java DefaultDataTable valeurs dynamiques

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

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

fonction d'interaction de base de données ici:

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; 

    } 

La sortie que je reçois dans ma console est: {columns = [nom d'utilisateur, mot de passe, gratuit], les caractéristiques = [[Hej, HeJ, 1 ], [Brugernavn, Mot de passe, 1], [Brugernavn1, Mot de passe, 0], [test1, test2, 1], [,, 1]]} Ce qui me va bien mais comme je l'ai dit plus tôt et pas un tableau - nouvelle ligne.

Répondre

0

Je vous suggère de créer votre propre DefaultTableModel en utilisant vecteurs. Vous pouvez utiliser quelque chose comme ça:

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

DANS VOTRE MÉTHODE PRINCIPALE OU VOUS CREER JTable

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

Il peut y avoir quelques erreurs que je l'ai écrit ici et devrait être essayer/bloc catch trop , mais vous pouvez réparer et les ajouter :)

+0

Merci pour votre aide! cela ajoute les noms de colonnes juste bien! mais je ne pas cependant ajouter des données? est-ce que tu sais pourquoi? :) –

+0

car nécessaire pour ajouter un nouveau DefaultTableModel à JTable (une nouvelle boucle pour créer un modèle) – mKorbel

+0

@PatrickHansen ajouter Sytem.out.println (rs.getObject (i)); avant singleRow.addELement (rs.getObject (i)); et vérifiez si les données proviennent bien de la base de données. sinon, vous devriez vérifier votre requête et votre base de données. – trd3v3lop