tra*_*god 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;
}
Run Code Online (Sandbox Code Playgroud)
附录:在上面的示例中,DateRenderer因为TableModel返回类型标记 而被唤起,因为Date.class它已成为默认类型.
table.setDefaultRenderer(Date.class, new DateRenderer());
Run Code Online (Sandbox Code Playgroud)
通过如下所示的重写可以获得相同的外观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;
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11370 次 |
| 最近记录: |