【发布时间】:2014-01-03 19:28:38
【问题描述】:
尝试将文件列表添加到 Jlist,然后过滤 JList 中的文件以仅返回 .txt 文件和固定字符长度。还尝试删除返回的文件路径,仅在文件的 JList 中显示文件名+扩展名。
到目前为止,除了删除文件路径之外,一切都完成了。 例如,它仍然返回“C:\java_help.txt”,而不仅仅是 JList 中的“java_help.txt”。
import javax.swing.*;
import java.io.*;
public class FileName extends JFrame{
JPanel pnl=new JPanel();
public static void main (String[]args) {
FileName print=new FileName();
}
JList list;
@SuppressWarnings("unchecked")
public FileName() {
super("Swing Window");
setSize(250,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
add(pnl);
String path="C:/";
File folder=new File(path);
File[]listOfFiles=folder.listFiles(new TextFileFilter());
list=new JList(listOfFiles);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setLayoutOrientation(JList.VERTICAL);
pnl.add(list);
pnl.revalidate();
}
}
class TextFileFilter implements FileFilter {
public boolean accept(File file) {
String name=file.getName();
return name.length()<28&&name.endsWith(".txt");
}
}
我认为 getName() 应该完成此操作,但似乎并非如此。如何从文件名中删除路径,并在 JList 中只留下文件名+扩展名?上面代码的适用示例将不胜感激。
【问题讨论】:
-
你可以尝试用
Paths代替File,我相信它有.getName()的方法。 -
API 听起来 getName() 应该返回路径的最后一部分,但如果不是,你不能自己解析字符串吗?
-
只是我的一个小毛病...不要使用
@SuppressWarnings("Unchecked"),您的编译器抱怨是有原因的,为了构建强大的应用程序而倾听它。 -
你用的是什么java?因为,API 不仅声明它返回文件名(没有路径),而且在我的测试系统上使用 OpenJDK 和 Oracle 的 java 时,它按预期工作,只返回文件名,没有路径。
-
与您的问题无关,但您在此处遇到了一些常见的 Swing 问题:您应该将
new FileName行包含在EventQueue.invokeLater中。还把JList放在JScrollPane里面,全部建好后把面板加到JFrame里面:这样就不用调用revalidate了。