JTable中一列的java多单元格呈现器?
假设我有以下JTable,按下按钮后立即显示:
| Name
------+------------
True | Hello World
False | Foo Bar
True | Foo
False | Bar
我想将初始值为的单元格渲染为JCheckBox,并将初始值为的所有单元格渲染为false,以不显示任何内容(无JCheckBox)。用户可以检查或取消检查单元格中最初为true的jcheckbox,这将对我创建的图表有所帮助
现在,我的单元渲染器在所有单元中显示jcheckbox,包括那些最初为false的单元(它显示那些没有复选标记的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
之前使用this.setVisible(false)
,但它不起作用。我正在考虑使用多个单元格渲染器来完成此任务。有可能这样做吗?任何建议都将不胜感激
# 1 楼答案
如果初始值为false,则让
getTableCellRendererComponent
返回一个空白JLabel# 2 楼答案
存储布尔值。对于真值,为TRUE。然后为假值存储一个空字符串。然后,您需要:
a)覆盖getCellRenderer(…)方法返回单元格中找到的数据的适当呈现器
b)使包含空字符串的单元格不可编辑:
使用这种方法,不需要自定义渲染器或编辑器