从ArrayList <string>填充jTable,而不创建新类。

时间:2017-03-29 18:18:16

标签: java arraylist netbeans jtable jax-ws

我有一个从数据库返回ArrayList<String>的Web服务。我需要使用jTable在客户端Java应用程序上填充ArrayList。如何组织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

1 个答案:

答案 0 :(得分:0)

如果你的目标是将每个名称/帐号组合放在它自己的行上,但是你将它们全部放在一个列表中,你需要做一些不同的事情。

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

你每次增加2,因为你只关心名字+帐号组合,它成对出现。

其次,您只想传递model.addRow对象数组以及该行所需的数据。您正在将listcustomer中的每个字符串添加到其中,然后将整个数组作为一行添加到模型中。

上面我刚刚在for循环中添加了一个新的rowdata对象数组,并用i(名称)的值和i + 1的值(帐号)填充它。请注意,如果由于某种原因缺少姓名或帐号,这将会失去同步。