Java:JTable无法正确显示图标

Java:JTable无法正确显示图标,java,swing,icons,jtable,Java,Swing,Icons,Jtable,在我的应用程序中,我需要在JTable中显示文件系统文件。当我单击JTree节点(任何系统文件夹)时,该文件夹的内容显示在JTable中 在JTable的第一列(显示文件或文件夹图标的名称)中,图标从系统图标中提取并显示。 一切正常。但是,问题是,当渲染器渲染图标时,第一个文件(JTable的第一行)的图标在所有行中重复。我的意思是图标不会在JTable的后续行中更改。在这里,我的代码是一个渲染器获取图标,模型将其显示在JTable中 class KeyIconCellRenderer exte

在我的应用程序中,我需要在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);
    }
}
下面是我使用render显示的代码

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();
    }
}
私有类选择实现TreeSelectionListener{
公共作废值已更改(TreeSelection事件e){
Object[]myData=新对象[6];
树路径=e.getPath();
FileUtil=newfileutil();
文件元数据;
向量vList=新向量();
DefaultMutableTreeNode=(DefaultMutableTreeNode)treeMainView.getLastSelectedPathComponent();
FileInfo=(FileInfo)node.getUserObject();
File filePath=info.getFilepath();
vList=util.getChildList(文件路径);
dtModel.getDataVector().removeAllElements();

对于(int i=0;i[曲面错误是在循环中重置表列的渲染器,每次都在渲染器的构造函数中硬编码当前图标。因此,文件图标用于所有

基本问题是,您似乎没有完全理解a的概念:它是用来显示单元格数据的,因为它是作为GetXXCellRenderComponent中的参数传递的。因此,这是查找要使用的图标的地方。方法是将文件对象存储在表单元格中,并在每次使用该方法时查询相应的图标被称为

干杯
珍妮特

FYI:当你在互联网上交叉发布问题时,记得检查你的问题的措辞,以确保它仍然有意义。你参考了一张附加的图片(我没有看到)。我猜你指的是附加在Code Ranch()上的问题的图片?我已附上您在Code Ranch使用的图像。您能否发布此问题的简单工作示例的完整代码(以便我们可以在计算机上试用)?似乎缺少代码(例如,dtModel来自何处?)。