用户输入后更新JTable中的图标

时间:2013-10-02 18:05:51

标签: swing jtable jlabel renderer tablecellrenderer

用户在JTable中输入数字后,我需要更新JTextField中的图标。

步骤分步:

  • 用户点击JTable行,然后打开JFrame以修改其内容。
  • JTextField中有一个EditFrame,用户将一个数字从0添加到100.该数字会在用户关闭EditFrame后更改我的JTable行中显示的图标

我读了documentation here。我改变了我的aproach。我杀死了渲染器并在我的Meal类中创建了静态图标并创建了一个类似的方法:

  public ImageIcon getIconByValue(int value){
    if(value==0)
        return ONESTAR;
    else
        return ...;     
}

并在我的tablemodel中进行了一些更改(以存储ImageIcon):

  public Class<?> getColumnClass(int columnIndex) {  
    switch (columnIndex) {  
  case RATING:  
   return ImageIcon.class;    
...} 
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {  
       //..other cases....//  
        case RATING:            
                meal.getIconByValue((int)aValue);  
                break;
}
 public void setData(List<Meal> list){  
    this.meals.clear();  
     for(Meal m:list){  
       Meal meal=new Meal();  
    //...other sets..//  
      meal.getIconByValue(m.getRating());  
  }  
  this.meals.add(meal); 
 }

但是我的评级空间(应该显示星星),完全是空白的。 注意:我也阅读了其他主题,但没有一个有助于如何在JTable中更改OnTheFly图标。

1 个答案:

答案 0 :(得分:0)

它比我预期的更简单。我在我的bean类中加载了这样的图像:

   private ImageIcon fivestars=new ImageIcon(getClass().getResource("/cr/hmp/gui/IMG/5star.png"));  

让我的模型在我的getColumnClass中返回一个icon类:

   case RATING:
        return ImageIcon.class;

在我的getValueAt中我做了:

 return meal.getIconByValue( meal.getRating() );

现在关闭我的EditFrame后没有任何问题就更新了这行。