繁体   English   中英

JTable禁用单元格中的Checkbox

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM