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