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