В моем приложении мне нужно отобразить файлы файловой системы в JTable. Когда я нажимаю на узел JTree (который является любой системной папкой), содержимое этой папки отображается в JTable.
В первом столбце JTable (где показано имя значка файла или папки) значок извлекается из системного значка и отображается.
Все работает нормально. Однако проблема заключается в том, что когда средство визуализации отображает значок, значок первого файла (первая строка JTable) повторяется во всех строках. Я имею в виду, что значок не изменяется в последующих строках JTable. Здесь мой код, в котором рендер получает значок, а модель отображает его в JTable
class KeyIconCellRenderer extends DefaultTableCellRenderer {
public KeyIconCellRenderer(String ext) {
File file = new File(ext);
Icon icon = FileSystemView.getFileSystemView().getSystemIcon(file);
setIcon(icon);
}
}
и вот код, в котором я использую рендер для отображения
private class Selection implements TreeSelectionListener {
public void valueChanged(TreeSelectionEvent e) {
Object[] myData= new Object[6];
TreePath path = e.getPath();
FileUtil util= new FileUtil();
FileMetaData metaData;
Vector<FileMetaData> vList = new Vector<FileMetaData>();
DefaultMutableTreeNode node = (DefaultMutableTreeNode)treeMainView.getLastSelectedPathComponent();
FileInfo info =(FileInfo)node.getUserObject();
File filePath= info.getFilepath();
vList=util.getChildList(filePath);
dtModel.getDataVector().removeAllElements();
for(int i=0;i<vList.size(); i++){
Vector v= new Vector();
metaData=(FileMetaData)vList.get(i);
v.add(metaData.getName());
tblMainView.getColumnModel().getColumn(0).setCellRenderer(new KeyIconCellRenderer(metaData.getClientpath()));
v.add(metaData.getClientpath());
if(metaData.isDirectory()){
v.add("");
}else
{
v.add((FileHelper.getSizeString(metaData.getSize())));
}
if(metaData.isDirectory()){
v.add("");
}else
{
v.add(new Date(metaData.getTime()));
}
if(metaData.isDirectory()){
v.add("Folder");
}else
{
v.add("File");
}
v.add("Pending Upload");
dtModel.insertRow(0, v);
}
tblMainView.repaint();
}
}
как на прикрепленном изображении, только значок первого файла повторяется во всех строках,
Пожалуйста, помогите, это будет огромное одолжение,
Спасибо