[英]Multiple cell renderers for a column in a 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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.