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