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 次 |
最近记录: |