从 ArrayList<String> 填充 jTable,而不创建新的 class。

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

我有一个来自数据库的 returns ArrayList<String> Web 服务。我需要用 ArrayList 在客户端 Java 应用程序上填充 jTable。我如何组织 ArrayList,使其显示在 table 的正确行中?目前它 returns 每个元素,用逗号分隔。

这是 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");
            }
        }
    }
}

这个returns:

[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 行中。

我需要在 table 的第一列的不同行上显示 TestName1, Name2, emp3,,并在第二列的不同行上显示 46484654897, 646543543, 534354354

如果您的目标是将每个 name/account 数字组合放在它自己的行中,但您已将它们全部放在一个列表中,那么您需要做一些不同的事情。

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 处的值(帐号)填充它。请记住,如果由于某种原因缺少姓名或帐号,这将不同步。