在我的應用程序中,我需要在JTable中顯示文件系統文件。當我點擊JTree節點(這是任何系統文件夾)時,該文件夾的內容顯示在JTable中。Java: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();
}
}
作爲附加的圖像中,只有拳頭文件的圖標重複中的所有行,
請幫幫忙,這將是一個巨大的青睞, 感謝
FYI:當你交叉張貼問題,在互聯網上,記得要檢查你的問題的措辭,以確保它仍然是有意義的。你參考一個附加的圖像(我沒有看到一個)。我推測你是在Code Ranch(http://www.coderanch.com/t/532283/GUI/java/JTable-Cell-Rendere-Not-showing)中提到你的問題的圖片? – 2011-03-28 09:23:57
我附上了您在Code Ranch使用的圖像。 – 2011-03-28 09:25:42
你可以發佈一個簡單的,這個問題的工作示例的完整代碼(所以他們我們可以在我們的電腦上試用它)?似乎缺少代碼(例如,dtModel從哪裏來?)。 – 2011-03-28 09:38:04