Java 在JList中显示文件对象的简单名称

Java 在JList中显示文件对象的简单名称,java,swing,jlist,defaultlistmodel,Java,Swing,Jlist,Defaultlistmodel,当我使用model.addElement(file)将文件对象添加到DefaultListModel(用于创建JList)中时,JList中显示的文本是文件的路径。但我只想显示文件名。但是,我不能执行model.addElement(file.getName()),因为我以后需要访问file对象,而不仅仅是字符串 如何在仅显示文件名的情况下将文件对象添加到列表/模型?谢谢大家! 您可以通过创建自定义渲染器来实现这一点: class FileRenderer extends DefaultList

当我使用
model.addElement(file)
将文件对象添加到DefaultListModel(用于创建JList)中时,JList中显示的文本是文件的路径。但我只想显示文件名。但是,我不能执行
model.addElement(file.getName())
,因为我以后需要访问file对象,而不仅仅是字符串


如何在仅显示文件名的情况下将文件对象添加到列表/模型?谢谢大家!

您可以通过创建自定义渲染器来实现这一点:

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教程中关于创建自定义渲染器的部分:

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教程部分