JTable禁用单元格中的checkbox

你好我有一个JTable我想灰所有禁用checkbox单元格我试图用自定义渲染器检查isEnabled(),然后更改背景颜色,但仍然不workin。 有什么build议么? 谢谢!!!

正如“ 概念:编辑器和“渲染器 ”中指出的,“单个单元格渲染器通常用于绘制包含相同types数据的所有单元格”。 您需要在表格模型中保持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; } 

附录:在上面的例子中, DateRendererDateRenderer ,因为TableModel返回types标记 Date.class ,它已经被默认设置。

 table.setDefaultRenderer(Date.class, new DateRenderer()); 

通过覆盖prepareRenderer()可以获得相同的外观 ,如下所示,但是对于所有单元而言,不pipe类如何,都会调用该方法。 因此, prepareRenderer()对于影响整个行是非常理想的,如Table Row Rendering所示。

 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; } };