Java:JTable没有正确显示图标
问题描述:
在我的应用程序中,我需要在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();
}
}
作为附加的图像中,只有拳头文件的图标重复中的所有行,
请帮帮忙,这将是一个巨大的青睐, 感谢
答
[您的表面错误是重置循环中表列的渲染器,每次对渲染器的构造函数中的当前图标进行硬编码。因此,文件图标被用于所有。
基本问题是,您似乎完全不了解renderer的概念:它显示的是单元数据,因为它在getXXCellRendererComponent中作为参数提供。所以这是查找要使用的图标的地方。要走的路是将File对象存储在表格单元格中,并在每次调用该方法时查询适当的图标。
干杯 珍
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