带有行过滤器和自定义渲染器的JTable不能正确渲染对象的图标

时间:2012-03-14 20:20:57

标签: java swing filter renderer

我有自定义渲染器的JTable,它在单元格中设置图标。

myTable.setDefaultRenderer(MyClass.class, new DefaultTableCellRenderer() {
   public Component getTableCellRendererComponent(...) {

         JLabel label = table.getTableCellRendererComponent(...);
         label.setIcon(iconMap.get( object_type );

         return label;
   }
});

其中iconMap包含对不同图标的引用,而object_type是一种基于我希望图标显示在标签旁边的类型。结果表显示其中一列中的单元格,其中图标根据类型而不同。这是一种预期的行为。

接下来我想基于类型过滤行,我正在使用

TableRowSorter<> sorter = new TableRowSorter(myModel);
RowFilter<> filter = new RowFilter<>() {
    public boolean include(...) {
         if ( expected_type ) 
                return true;

          return false;
    }

}
sorter.setRowFilter(filter);
myTable.setRowSorter(sorter);

所以基本上已经完成了这本书,没有什么令人惊叹的。

问题是显示单元格的图标,因为没有设置过滤器。

在没有过滤的情况下运行应用程序将显示两列,正确匹配对图标类型&lt; - &gt;对象类型

| A-type-icon | A-type-object |
| B-type-icon | B-type-object |
| B-type-icon | B-type-object |
| B-type-icon | B-type-object |

运行与筛选A类型对象的过滤器相同的

| A-type-icon | B-type-object |
| B-type-icon | B-type-object |
| B-type-icon | B-type-object |

看起来首先渲染对象而不是过滤对象。 我能做些什么(或我做错了什么)才能正确显示图标。

0 个答案:

没有答案