我所做的任务非常简单,但我遇到了JList组件的一个问题。
我需要的是什么。我从DataBase获取数据,将其加载到String数组,将数组打包到ArrayList(只是因为我duno我有多少记录),从方法返回它作为ArrayList。 现在在接收方。我遇到了麻烦,我无法从ArrayList中获取String数组,因此我可以传递给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));
这是loadPasswords();
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;
}
我尝试使用多维数组,但JList仍然需要单维数组。
答案 0 :(得分:0)
使用DefaultListModel并使用一个简单的for或for-each循环将其加载到Strings中,循环遍历ArrayList,将ArrayList中的每个String项添加到模型中,或者创建自己的ListModel类,扩展AbstractListModel并使用ArrayList作为其数据核心。
编辑,因为您的数据保存在数组的ArrayList中,那么您可能不希望在ArrayList中显示它,而是在JTable中。在这里,您最好的选择是创建自己的TableModel,一个基于AbstractTableModel并使用您的ArrayList作为其数据核。另外,将数据加载到数组中可能更好的方法是创建一个自定义类来保存ResultSet中的每一行数据。
你说:
我的问题是简单地将内容加载到JList。我们的想法是在列表中显示应用程序/网站名称,然后当您单击它时,您将获得包含在数组中的完整数据。这就是为什么我把fetch.get(0)...因为。我至少需要一些东西。
然后