在JTable中动态更改图标

时间:2013-09-24 21:49:17

标签: java swing jtable icons tablecellrenderer

我有一个带有JLabel的JTable,如果一个人在测试中被批准(或失败),我会显示给定的图片。我使用该渲染器:

public  class TestCellRenderer extends JLabel implements TableCellRenderer {    
     List<Student> list=null;  
public TestCellRenderer(List<Student> l){  
    super();  
    this.list=l;       
}      
@Override  
public Component getTableCellRendererComponent(JTable table, Object object,boolean isSelected, boolean hasFocus, int row, int column) {   
         Student s=list.get(row);  
        if(s.getPoints()>=90){  
                setIcon(new ImageIcon(getClass().getResource(okay_path)));}  
        else if(s.getPoints()<90){  
            setIcon(new ImageIcon(getClass().getResource(error_path)));
         }                           
    }         
        setHorizontalAlignment(JLabel.CENTER);            
    return this;  
    }
}//end renderer  

直到我必须在JTable行中编辑学生才能完美无缺。我打开一个屏幕,其中包含该行的内容以供编辑。当然,我的表模型不显示值,但是我显示图片的JLabel 。但是在我的编辑框架中,我有一个带有值的框。我选择了一个值后我尝试更新但是没有用(当然,如果我关闭主框架并打开图像显示已修改,但我需要显示关闭编辑框后更新的行(注意:我在编辑框架更新中更改的所有其他字段,减去JLabel)。我在MyModel中尝试了这个(只是相关部分):

StudentTableModel extends AbstractTableModel{

public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
  Student s=students.get(rowIndex);
 //...many cases
   case GRADE_POINT:
s.setGrade((JLabel)aValue);
   fireTableCellUpdated(rowIndex, columnIndex); // Notify update
}
public void setData(List<Student> list){
    this.students.clear();
    for(Student s:list){
             Student student=new Student();
              student.setId(c.getId());
             //...other setters and finally
             student.setGradePointImage(setJLabel(s.getPoints()));
             this.students.add(student);    
            }
    this.fireTableDataChanged();
 }//end set data
public Student getStudent(int rowIndex){
  Student s=students.get(rowIndex);
  Student student=new Student()
  //setters
 return student;
}
public JLabel setJLabel(int value){  
      JLabel l=new JLabel();  
           if(value>=90)  
         l.setIcon(new ImageIcon(getClass().getResource("...successpath")));  
           else if(value<90)  
         l.setIcon(new ImageIcon(getClass().getResource("...failedpath")));  
       return l; 
 }
}//end StudentTableModel

我有一个MainFrame,其中我的表(以及相应的行显示)和一个EditFrame,如果用户连续点击两次,它总是显示。一切正常但图片更新。哦,我这样做我的EditFrame:

    if (arg0.getSource() == exitDialog) {  
         model.setData(myList);  
         model.fireTableDataChanged();  
       dispose();//clear EditFrame  
     }//it should update after the EditFrame is closed.  

它会更新除Icon之外的所有内容。我可以做些什么来更新Icon?最诚挚的问候,

0 个答案:

没有答案