JTable中列的多个单元格渲染器?

假设我有以下JTable,只要按下按钮就会显示:

| Name ------+------------ True | Hello World False | Foo Bar True | Foo False | Bar 

我想渲染最初为JCheckBox的单元格,以及最初为 false的所有单元格都不显示任何内容(没有JCheckBox)。 用户可以检查或取消检查最初为真的单元格中的JCheckBox,这将对我创建的图表起作用。

现在,我的单元格渲染器在所有单元格中显示JCheckBoxes,包括最初为假的那些(它显示那些没有复选标记的JCheckBox),但我想在后者中不显示任何内容。 这是我的代码:

 protected class CheckBoxCellRenderer extends JCheckBox implements TableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (!(Boolean) tableModel.getValueAt(row, 0)) { NoCheckBoxCellRenderer renderer = new NoCheckBoxCellRenderer(); return renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); } this.setSelected((Boolean) tableModel.getValueAt(row, 0)); return this; } } protected class NoCheckBoxCellRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { this.setVisible(false); return this; } } 

if语句中,我尝试在使用NoCheckBoxCellRenderer之前使用NoCheckBoxCellRenderer this.setVisible(false) ,但它无法正常工作。 我正在考虑使用多个单元格渲染器来完成此任务。 有可能这样做吗? 任何建议将不胜感激!

将Boolean.TRUE存储为真值。 然后为false值存储一个空String。 然后,您需要:

a)覆盖getCellRenderer(…)方法,以返回在单元格中找到的数据的相应渲染器。

b)使包含空字符串的单元格不可编辑:

 JTable table = new JTable(data, columnNames) { public TableCellRenderer getCellRenderer(int row, int column) { if (column == 0) { Class cellClass = getValueAt(row, column).getClass(); return getDefaultRenderer( cellClass ); } return super.getCellRenderer(row, column); } public boolean isCellEditable(int row, int column) { Class cellClass = getValueAt(row, column).getClass(); if (column == 0 && cellClass instanceof Boolean) { return true; } else { return false; } return super.isCellEditable(row, column); } }; 

使用此方法不需要自定义渲染器或编辑器。

如果初始值为false,则getTableCellRendererComponent返回空白JLabel。