您好,我有一个 JTable 我想将我尝试使用自定义渲染器检查 isEnabled() 然后更改背景颜色但仍然无法正常工作的所有禁用复选框单元格变灰。有什么建议么?谢谢!!!
问问题
12601 次
1 回答
14
正如概念:编辑器和渲染器中所述,“单个单元格渲染器通常用于绘制包含相同类型数据的所有单元格。” 您需要维护表模型enabled
中的状态。
附录:作为一个具体的例子,这个例子Date
中的数据模型是一个简单的实例数组。getTableCellRendererComponent()
如下所示的覆盖会导致奇数天被禁用。在这种情况下,奇数是Date
值本身固有的属性,但模型可以查询任何相关属性。
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row, int col) {
Calendar calendar = Calendar.getInstance();
calendar.setTime((Date) value);
Component c = super.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, col);
c.setEnabled(calendar.get(Calendar.DAY_OF_MONTH) % 2 == 0);
return c;
}
附录:在上面的示例中,DateRenderer
由于TableModel
返回了类型 token Date.class
,所以调用了 ,它已被设为默认值。
table.setDefaultRenderer(Date.class, new DateRenderer());
如下所示,可以通过覆盖获得相同的外观,但对所有单元格调用该方法,而与类无关。因此,它非常适合影响整行,如Table Row Rendering中所示。prepareRenderer()
prepareRenderer()
private final JTable table = new JTable(model) {
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int col) {
Component c = super.prepareRenderer(renderer, row, col);
if (col == DATE_COL) {
Calendar calendar = Calendar.getInstance();
calendar.setTime((Date) model.getValueAt(row, col));
c.setEnabled(calendar.get(Calendar.DAY_OF_MONTH) % 2 == 0);
}
return c;
}
};
于 2011-04-27T03:31:35.117 回答