我有一个带有 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.
它会更新除图标之外的所有内容。我可以做些什么来更新图标?此致,