假设我有以下JTable,只要按下一个按钮,就会显示该JTable:
| Name
------+------------
True | Hello World
False | Foo Bar
True | Foo
False | Bar
我想呈现 最初 对JCheckBox 为真的单元格,以及所有 最初为
false的所有单元格不显示任何内容(无JCheckBox)。用户可以选中或取消选中最初为真的单元格中的JCheckBoxes,这会对我创建的图表有所帮助。
现在,我的单元格渲染器在所有单元格中显示JCheckBoxes,包括最初为false的单元格(它显示那些没有复选标记的JCheckBoxes),但我不想在后者中显示任何内容。这是我的代码:
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
语句中,我尝试在使用this.setVisible(false)
之前先使用NoCheckBoxCellRenderer
,但是它没有用。我正在考虑使用多个单元格渲染器来完成此任务。有可能这样做吗?任何建议将不胜感激!
将Boolean.TRUE存储为真实值。然后为错误的值存储一个空字符串。然后,您需要:
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);
}
};
使用这种方法,不需要自定义渲染器或编辑器。
问题内容: 我正在跟踪发现的一些代码,(是的,我知道它是如何工作的)它来自这里:代码链接 我想做的是如果单元格值设置为“黄色”,则设置单元格前景色 这是我的代码: 和单元格渲染器 问题是,如果我将任何单元格值设置为“黄色”,它就不会改变 提前致谢! 问题答案: 您的渲染器曾经使用过吗?您将其设置为包含String的单元格的默认渲染器,但是是否重载了模型的方法,以便它知道某些单元格包含String
问题内容: 你们真是太棒了,为我在最后一个问题上指明了正确的方向,我在这里对我原来的问题进行了扩展: 如何将JTable列设置为String并排序为Double? 由于现在我使用自定义单元格渲染器将价格列的格式设置为$ ###,## 0.00,因此我现在还为该单元格设置了JTextField编辑器。单元格的编辑工作正常,除了更新值时,自定义渲染器中设置的数字格式似乎不再格式化单元格(在提交编辑后,
单元格渲染器: 将JChecboxs添加到面板: [在此输入图片描述][1] 强文本[1]:https://i.stack.imgur.com/D8Mhs.png 请查找所附图像。
我创建了一个带有自定义表格呈现和自定义单元格编辑器的JTable,它在图像中给出结果 我使用一个扩展JPanel的单独类创建了第一个表格单元格中显示的面板。并将表值添加为, 这是我的表格自定义类来创建这个表格, 我的问题是认为面板如我预期的那样显示,我不能在文本字段中键入或更改复选框或单击按钮。请告诉我如何解决这个问题。
我创建了自定义单元渲染器,该渲染器从方法getTableCellRendererComponent中获取参数,并基于值列表创建复选框,值列表是整数的列表。 问题是,当拖动窗口或调整其大小时,会多次调用渲染器,并且面板会在JTable的单元格中多次添加,从而导致重复的JCheckBox。 渲染器: 单元格编辑器: 主面板: (
我试图使我的头的背景具有渐变。 这可以很好地使用代码: 然而,由于某种原因,我看不到我的边框和文本,似乎文本也应用了渐变? 我希望文本为黑色,各栏之间有彩色边框。有什么想法吗?