【问题标题】:How to display a File[] array in a JList如何在 JList 中显示 File[] 数组
【发布时间】:2018-05-09 02:45:59
【问题描述】:

我正在尝试显示从 JList 中的文件夹获取的文件列表,这是我的代码,但是当我运行项目并选择所需的文件夹时,我会在输出控制台中获得文件的名称,但是我无法在 JList 中显示 File[] 数组。

private void jButtonOpenActionPerformed(java.awt.event.ActionEvent evt) {

    // Gets the path of the folder selected
    JFileChooser fileChooser = new JFileChooser();
    fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    fileChooser.setCurrentDirectory(new File("C:\\...\\ProjectColorCT"));

    int show_fileC = fileChooser.showOpenDialog(this);

    String pathFolder = null;
    if (show_fileC != JFileChooser.CANCEL_OPTION ){
        File folderName = fileChooser.getSelectedFile();
        pathFolder = folderName.getAbsolutePath();
        jTextPathFolder.setText(pathFolder);
    }
    System.out.println(pathFolder);

    // Gets all the names of the files inside the folder selected previously
    File folderCortes = new File(pathFolder);
    File[] archivos = folderCortes.listFiles();
    for (File fichero : archivos) {
        System.out.println(fichero.getName());
    }

    // Create the model for the JList
    DefaultListModel model = new DefaultListModel();

    // Add all the elements of the array "archivos" in the model
    for (int i=0 ; i<archivos.length ; i++){
        model.addElement(archivos[i].getName());
    }

    // Add the JList to the JScrollPane
    jCortesList = new JList(model);      
    jScrollCortes = new JScrollPane(jCortesList);

    // Print for testing
    for (int i=0 ; i<archivos.length ; i++){
        jCortesList.setSelectedIndex(i);
        System.out.println(jCortesList.getSelectedValue());
    }     
}  

我添加了一个DefaultListModel();,在我将该模型分配给JList 之后,最后我将JList 分配给JScrollPane,但它没有在界面中显示列表。

【问题讨论】:

  • jScrollCortes 何时添加到 UI 中?
  • 当我从 Swing Controls Palette 添加 JList 时,JScrollPane 默认创建,我将其名称更改为 jScrollCortes

标签: java swing jlist


【解决方案1】:

根据您可用的脱离上下文的代码,显而易见的答案是,您实际上并未将 jScrollCortes 添加到 UI...

private void jButtonOpenActionPerformed(java.awt.event.ActionEvent evt) {
    //...    
    // Add the JList to the JScrollPane
    jCortesList = new JList(model);      
    jScrollCortes = new JScrollPane(jCortesList);

    add(jScrollCortes);
    revalidate();
    repaint();
    //...
}  

这可能会或可能不会起作用,具体取决于类、UI 和/或布局的设置方式。

更好的解决方案是让 JListJScrollPane 已经在 UI 上创建显示,然后您需要做的就是将新的 ListModel 应用到现有的 JList

p>

当我从 Swing Controls Palette 中添加 JList 时,JScrollPane 默认创建,我将它的名称更改为 jScrollCortes

既然您已经有一个JList 的实例(包装在JScrollPane 中),那么您应该只需要更改模型...

DefaultListModel model = new DefaultListModel();

//...

// Add the JList to the JScrollPane
jCortesList.setModel(model);
//jCortesList = new JList(model);      
//jScrollCortes = new JScrollPane(jCortesList);

【讨论】:

  • jCortesList.setModel(model); 哇哦!真的行!太感谢了 !!!! @MadProgrammer
猜你喜欢
  • 2019-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
  • 2013-03-26
  • 2014-01-12
  • 2013-05-22
  • 2020-06-02
相关资源
最近更新 更多