[英]JTable disable Checkbox in Cell
你好,我有一个JTable我想灰色所有禁用的复选框单元格我尝试使用自定义渲染器检查isEnabled(),然后更改背景颜色,但仍然没有工作。 有什么建议? 谢谢!!!
如概念:编辑器和渲染器中所述 ,“单个单元格渲染器通常用于绘制包含相同类型数据的所有单元格。” 您需要在表模型中维护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
返回类型标记 Date.class
,它已成为默认值。
table.setDefaultRenderer(Date.class, new DateRenderer());
通过覆盖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;
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.