簡體   English   中英

在 JList 中顯示文件對象的簡單名稱

[英]Display Simple Name of File Object in JList

當我使用model.addElement(file)將文件對象添加到用於創建 JList 的 DefaultListModel 中時,JList 中顯示的文本是文件的路徑。 但我只想顯示文件名。 但是,我不能執行model.addElement(file.getName()) ,因為稍后我需要訪問文件對象,而不僅僅是字符串。

如何在僅顯示文件名的同時將文件對象添加到列表/模型? 謝謝!

您可以通過創建自定義渲染器來做到這一點:

class FileRenderer extends DefaultListCellRenderer
{
    public Component getListCellRendererComponent(
        JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
    {
        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);

        File file = (File)value;
        setText( file.getName() );

        return this;
    }
}

然后,使用以下命令為JList設置渲染器:

list.setCellRenderer( new FileRenderer() );

有關更多信息和工作示例,請參見Swing教程中有關編寫自定義單元格渲染器的部分。

一種丑陋的方法是創建您自己的文件類,編輯toString()方法。 看看我的代碼段:

import java.io.File;

class OwnFile extends File {

    public OwnFile(String s) {
        super(s);
    }

    @Override
    public String toString() {
        String url = super.toString();
        String [] array = url.split("/");
        return array[array.length-1];
    }
}

這是一個使用OwnFile創建自己的JList的OwnFile 這對於我的情況來說效果很好,並且僅在JList中顯示spotify.txt而不是src/spotify.txt

import javax.swing.*;
import java.io.File;

public class Main {
    public Main(){
        JFrame frame = new JFrame();
        JList list = new JList();
        list.setModel(new ListModel());
        frame.add(list);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }

    class ListModel extends DefaultListModel<File>{

        ListModel() {
            addElement(new OwnFile("src/spotify.txt"));
        }
    }
    public static void main(String[] args) {
        new Main();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM