您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

JTable禁用单元格中的复选框

JTable禁用单元格中的复选框

如“ 概念:编辑器和渲染器 ”中所述,“通常使用单个单元格渲染器来绘制包含相同类型数据的所有单元格。” 您需要维护表模型中的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;
}

};

其他 2022/1/1 18:13:36 有590人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶