我正在尝试使用Swing编程一个que卡应用程序。 现在我试图在JList中的一个文件夹中列出所有的que卡片组(它们是txt文件)。 所以我想获取文本文件的文件名并将它们添加到我已经创建的列表中。我尝试了多种方法,这是我认为最接近的方法:
JList<DeckTypeA> listTypeADecks = new JList();
DefaultListModel<DeckTypeA> listModelTypeADecks = new DefaultListModel<DeckTypeA>();
File folder = new File("dexA");
//much later in the code
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
String[] listOfFileNames = new String[listOfFiles.length];
listOfFileNames[i] = listOfFiles[i].getName();
listTypeADecks.setListData(listOfFileNames); //here i get an error
};
我收到一条错误消息,指出JList.setListData(String[])
无效(我尝试将其添加到默认列表模型并以许多其他方式添加)。当我查找方法时,它总是说参数必须是一个对象,但不是一个对象类型的字符串?
非常感谢帮助,如果您发现其他任何错误,请告诉我。
答案 0 :(得分:2)
您的代码存在一些问题。
您在listofFileNames
循环中声明for
。此变量每次循环初始化,最后销毁。这意味着任何更改都会被丢弃。
您在每个循环结束时调用listTypeADecks.setListData
,但您可能希望在整个循环完成后调用它。
在您的实施中,Strings
中会有空listOfFileNames
,因为并非每个索引都可能是文件,但您只是跳过它们。
你可能想要这样的东西:
File[] listOfFiles = folder.listFiles();
List<String> listOfFileNames = new List<String>();
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
listOfFileNames.add(listOfFiles[i].getName());
};
listTypeADecks.setListData(listOfFileNames.toArray());