文件夹中所有文件名的 JList

JList of all Filenames in a Folder

我正在尝试使用 Swing 编写查询卡应用程序。 现在我试图在 JList 的一个文件夹中列出所有的卡片组(它们是 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[]) 无效(我已尝试将其添加到默认列表模型并以许多其他方式添加)。当我查找该方法时,它总是说参数必须是一个对象,但字符串不是一种对象吗? 非常感谢帮助,如果您发现任何其他错误,请告诉我。

您的代码存在一些问题。

  • 您在 listofFileNames 循环中声明 listofFileNames。该变量在每个循环中再次初始化,并在结束时 destroyed。这意味着任何更改都将被丢弃。

  • 您在每个循环结束时调用 listTypeADecks.setListData,但您可能希望在整个循环完成后调用它。

  • 在您的实现中,listOfFileNames 中会有空的 Strings,因为并非每个索引都可能是一个文件,但您可以跳过它们。

你可能想要这样的东西:

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