我创建了一个JList包含目录中文件列表的文件.这是JList.
JList MList;
String ListData[]
// Create a new listbox control
List = new JList(ListData);
Run Code Online (Sandbox Code Playgroud)
我还创建了一个方法来读取目录中的文本文件列表:
public String ReadDirectory() {
String path = "C://Documents and Settings/myfileTxt";
String files = null;
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
files = listOfFiles[i].getName();
if (files.endsWith(".txt") || files.endsWith(".TXT")) {
System.out.println(files);
}
}
}
return files;
}
Run Code Online (Sandbox Code Playgroud)
问题是我想要这个方法的结果(文本文件列表)JList.我怎样才能将File物体放入JList?
不要将字符串放入JList,使用File对象并设置渲染器.由于默认渲染器返回的组件是a JLabel,因此很容易设置图标.

import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.border.Border;
import javax.swing.filechooser.FileSystemView;
import java.io.File;
import java.io.FileFilter;
/**
This code uses a JList in two forms (layout orientation vertical & horizontal wrap) to
display a File[]. The renderer displays the file icon obtained from FileSystemView.
*/
class FileList {
public Component getGui(File[] all, boolean vertical) {
// put File objects in the list..
JList fileList = new JList(all);
// ..then use a renderer
fileList.setCellRenderer(new FileRenderer(!vertical));
if (!vertical) {
fileList.setLayoutOrientation(javax.swing.JList.HORIZONTAL_WRAP);
fileList.setVisibleRowCount(-1);
} else {
fileList.setVisibleRowCount(9);
}
return new JScrollPane(fileList);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
File f = new File(System.getProperty("user.home"));
FileList fl = new FileList();
Component c1 = fl.getGui(f.listFiles(new TextFileFilter()),true);
//f = new File(System.getProperty("user.home"));
Component c2 = fl.getGui(f.listFiles(new TextFileFilter()),false);
JFrame frame = new JFrame("File List");
JPanel gui = new JPanel(new BorderLayout());
gui.add(c1,BorderLayout.WEST);
gui.add(c2,BorderLayout.CENTER);
c2.setPreferredSize(new Dimension(375,100));
gui.setBorder(new EmptyBorder(3,3,3,3));
frame.setContentPane(gui);
frame.pack();
frame.setLocationByPlatform(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class TextFileFilter implements FileFilter {
public boolean accept(File file) {
// implement the logic to select files here..
String name = file.getName().toLowerCase();
//return name.endsWith(".java") || name.endsWith(".class");
return name.length()<20;
}
}
class FileRenderer extends DefaultListCellRenderer {
private boolean pad;
private Border padBorder = new EmptyBorder(3,3,3,3);
FileRenderer(boolean pad) {
this.pad = pad;
}
@Override
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
Component c = super.getListCellRendererComponent(
list,value,index,isSelected,cellHasFocus);
JLabel l = (JLabel)c;
File f = (File)value;
l.setText(f.getName());
l.setIcon(FileSystemView.getFileSystemView().getSystemIcon(f));
if (pad) {
l.setBorder(padBorder);
}
return l;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19785 次 |
| 最近记录: |