[英]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.