我有一个带有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?最诚挚的问候,