簡體   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