2016-09-20 3 views
0

私はJTableを持っています。残念ながら、DefaultTableModelを使用して記入したいのですが、私の出力は配列としてで、新しい行ではありません。以下の私のコードを見て、それ以上の説明が必要かどうか尋ねてください!ここ:)Java DefaultDataTable動的値

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; 

    } 

私は私のコンソールで取得出力は次のとおりです。{列= [ユーザ名、パスワード、自由]、件のデータ= HEJ、[[HEJ、1 [Brugernavn、Password、1]、[Brugernavn1、Password、0]、[test1、test2、1]、[、、1]]}私にはうまく見えますが、 1つの配列 - 新しい行ではありません。

答えて

0

を使用して、独自のデフォルトテーブルモデルを作成することをお勧めします。あなたの主なメソッドまたはWHERE YOUはJTableの

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

をCREATEがあり、私はそれをここに書いたいくつかのエラーとすることができ、あまりにも/ catchブロックを試してみるべきであるIN

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

: あなたはそのようなものを使用することができますあなたは修正して追加することができます:)

+0

ありがとうございました!これは列の名前を追加します。しかし私は何もデータを追加しないのですか?なぜなのかご存知ですか? :) –

+0

新しいDefaultTableModelをJTableに追加する必要があるため(モデルを作成するための新しいループ) – mKorbel

+0

@PatrickHansen add Sytem.out.println(rs.getObject(i));より前にはsingleRow.addELement(rs.getObject(i));データベースからデータをうまく取得するかどうかを確認します。そうでない場合は、クエリとデータベースを確認する必要があります。 – trd3v3lop