从JList Java的ArrayList获取字符串数组

从JList Java的ArrayList获取字符串数组,java,arrays,arraylist,jlist,Java,Arrays,Arraylist,Jlist,我所做的任务非常简单,但我在使用JList组件时遇到了一个问题 我需要的是。我从数据库中获取数据,将其加载到字符串数组中,将数组打包到ArrayList中(因为我不知道我有多少条记录),然后将其作为ArrayList从方法中返回。 现在在接收端。我遇到了一个问题,我无法从ArrayList获取字符串数组,以便可以传递到JList 这是代码 ArrayList<Object> fetch = new ArrayList<Object>(); public String[]

我所做的任务非常简单,但我在使用JList组件时遇到了一个问题

我需要的是。我从数据库中获取数据,将其加载到字符串数组中,将数组打包到ArrayList中(因为我不知道我有多少条记录),然后将其作为ArrayList从方法中返回。 现在在接收端。我遇到了一个问题,我无法从ArrayList获取字符串数组,以便可以传递到JList

这是代码

ArrayList<Object> fetch = new ArrayList<Object>();
public String[] data =new String[10];
    listModel = new DefaultListModel();      
    myList = new JList(listModel);
    //myList = new JList(data);
    // So it works with simple array of strings.
    fetch=DAO.loadPasswords();
     //At this point it asks me to cast an object to smth which late cause null pointer exception.
    myList = new JList(fetch.get(0));
ArrayList fetch=new ArrayList();
公共字符串[]数据=新字符串[10];
listModel=新的DefaultListModel();
myList=新的JList(listModel);
//myList=新的JLList(数据);
//因此,它适用于简单的字符串数组。
fetch=DAO.loadPasswords();
//此时,它要求我将一个对象强制转换为smth,这会导致空指针异常。
myList=newjlist(fetch.get(0));
这里是loadPasswords()

publicstaticarraylistloadpasswords(){
dbConnect();
布尔unswer=false;
字符串[]结果=null;
String query1=“从tblPasswordsStorage where中选择*
+“_user_id=?”;
字符串userId=Personal_Organizer.userProfile.getUserID();
ArrayList params=新的ArrayList();
参数add(userId);
executeQueryP(查询1,参数);
ArrayList fetched=null;
试一试{
如果(rs.next()){
unswer=true;
//Personal_Organizer.userProfile.setUserID(rs.getString(1));
结果[0]=rs.getString(1);
结果[1]=rs.getString(2);
结果[2]=rs.getString(3);
结果[3]=rs.getString(4);
结果[4]=rs.getString(5);
结果[5]=rs.getString(6);
结果[6]=rs.getString(7);
结果[7]=rs.getString(8);
结果[8]=rs.getString(9);
结果[9]=rs.getString(10);
获取。添加(结果);
}
如果(不回答){
while(rs.next()){
工具。打印(rs.getString(1));
}
}
}catch(SQLException-ex){
JOptionPane.showMessageDialog(null,
“SQL Server连接问题。\n”
+“请检查服务器地址、用户名和密码。”,
“输出”,
JOptionPane.普通消息);
}
dbClose();
回执;
}

我尝试使用多维数组,但JList仍然需要一维数组。

使用DefaultListModel并使用简单的for或for循环加载字符串,通过ArrayList循环,将ArrayList中的每个字符串项添加到模型中,或者创建自己的ListModel类,一种扩展AbstractListModel并使用ArrayList作为其数据核心的方法

编辑,因为您的数据保存在数组的ArrayList中,所以您可能不希望在ArrayList中显示它,而希望在JTable中显示它。在这里,您最好创建自己的TableModel,它基于AbstractTableModel,并使用ArrayList作为其数据核心。此外,可能比将数据加载到数组中更好的方法是创建一个自定义类来保存ResultSet中的每一行数据


你说:


我的问题是简单地将某些内容加载到JList。其思想是在列表中显示应用程序/网站名称,然后当您单击它时,您将获得包含在数组中的完整数据。这就是为什么我把fetch.get(0)放在这里,因为。我至少需要点什么

然后

  • 创建一个自定义类来保存每行数据
  • 从ResultSet的每一行创建此类的项
  • 用此类的项填充DefaultListModel
  • 为JList提供一个自定义ListCellRenderer,其中显示的是应用程序/网站名称
  • 然后,您可以显示名称,并且仍然让每个列表项保存它所需的所有相关信息

不相关:使用循环。对于(inti=0;i<10;i++)esult[i]=rs.getString(i+1);谢谢@Tarik。我知道这是一种愚蠢的方式,但现在它不是一个主要问题=)我的问题是简单地将一些东西加载到JList。其思想是在列表中显示应用程序/网站名称,然后当您单击它时,您将获得包含在数组中的完整数据。这就是为什么我把fetch.get(0)放在这里,因为。我至少需要点什么。我打赌我可以为数组执行fetch.get(0)。[0],但这可能是一种疯狂的方式。
public static ArrayList<Object> loadPasswords(){
    dbConnect();
    boolean unswer = false;
    String[] result=null;
    String query1 = "select * from tblPasswordsStorage where "
            + "_user_id = ?";
    String userId=Personal_Organizer.userProfile.getUserID();
    ArrayList<Object> params = new ArrayList<Object>();
    params.add(userId);
    executeQueryP(query1, params);
    ArrayList<Object> fetched=null;
    try {
        if (rs.next()) {
            unswer = true;
            //Personal_Organizer.userProfile.setUserID(rs.getString(1));
            result[0]=rs.getString(1);
            result[1]=rs.getString(2);
            result[2]=rs.getString(3);
            result[3]=rs.getString(4);
            result[4]=rs.getString(5);
            result[5]=rs.getString(6);
            result[6]=rs.getString(7);
            result[7]=rs.getString(8);
            result[8]=rs.getString(9);
            result[9]=rs.getString(10);
            fetched.add(result);


        }
        if (unswer) {
            while (rs.next()) {
                Tools.print(rs.getString(1));
            }
        }
    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null,
                "SQL Server connection issue.\n"
                + "Please, check Server address, user name and password.",
                "Output",
                JOptionPane.PLAIN_MESSAGE);
    }
    dbClose();
    return fetched;
}