簡體   English   中英

從ArrayList填充jTable <String> ,而無需創建新類。

[英]Populate jTable from ArrayList<String>, without creating a new class.

我有一個Web服務,該服務從數據庫返回ArrayList<String> 我需要使用該ArrayList填充客戶端Java應用程序上的jTable 如何組織ArrayList ,以便在表格的正確行中顯示? 當前,它返回用逗號分隔的每個元素。

這是WebMethod位:

@WebMethod(operationName = "ListCustomers")
public ArrayList ListCustomers() {
    try{
        Class.forName("org.apache.derby.jdbc.ClientDriver");
        Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/BankDB", "bankadmin", "bankadmin");
        Statement st = con.createStatement();
        PreparedStatement prst = con.prepareStatement("select Name, AccountNumber from CUSTOMERS");
        ArrayList<String> list = new ArrayList<>();
        ResultSet rs = prst.executeQuery();     

        while(rs.next()){
            String nm = rs.getString("Name");
            String an = rs.getString("AccountNumber").toString();
            list.add(new String (nm));
            list.add(new String (an));          
        }
        return (ArrayList) list;
    }
    catch(SQLException ex){
        System.err.println(ex.getMessage());
        return null;
    } 
    catch (ClassNotFoundException ex) {
        Logger.getLogger(BankServerService.class.getName()).log(Level.SEVERE, null, ex);
        System.out.println("second");
        return null;
    }
    finally{
        if(st != null){
            try {
                st.close();
            }
            catch(SQLException ex){
                System.out.println("Could not close statement");
            }
        }
    }
}

返回:

[TestName1, 46484654897, Name2, 646543543, emp3, 534354354]

客戶端節點看起來像這樣,我用另一種方法運行:

listCustomers();         
        DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
        Object rowData[] = new Object[listCustomers().size()];
        for (int i=0; i<listCustomers().size(); i++){
            rowData[i] = listCustomers().get(i);
            model.addRow(rowData);
        }

這僅將TestName1, 46484654897,填充為10行。

我需要在表的第一列的單獨行上顯示TestName1, Name2, emp3,並在第二列的單獨行上顯示46484654897, 646543543, 534354354

如果您的目標是將每個姓名/帳號組合放在自己的行上,但是將它們全部放在一個列表中,則需要做一些不同的事情。

listCustomers();         
DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
for(int i = 0; i < listCustomers.size(); i+=2){
    Object[] rowdata = new Object[] {listCustomers.get(i), listCustomers.get(i+1)};

    model.addRow(rowdata);
}

每次將i加2,因為您只關心名稱+帳號組合,並且它成對出現。

其次,您只想將包含該行所需數據的model.addRow傳遞給對象數組。 您要向listcustomer中添加每個字符串,然后將整個數組作為一行添加到模型中。

在上面,我只是在for循環內添加了一個新的rowdata對象數組,並使用i(名稱)上的值和i + 1(帳號)上的值填充了該數組。 請記住,如果由於某種原因缺少姓名或帳號,這將不同步。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM