渲染具有值的单元格
我在JTable中有表格。 2个字符串和一个Integer。我试图渲染(仅整数列)单元格值是否为0 <有我的代码:渲染具有值的单元格
public Component getTableCellRendererComponent(JTable aTable, Object aNumberValue,
boolean aIsSelected, boolean aHasFocus, int aRow, int aColumn) {
if (aNumberValue == null) {
return this;
}
Component renderer = super.getTableCellRendererComponent(
aTable, aNumberValue, aIsSelected, aHasFocus, aRow, aColumn
);
Number value = (Number) aNumberValue;
if (value.doubleValue() < 0) {
// do something with renderer
} else {
// do something with renderer
}
return this;
}
的问题是:我认为,该代码尝试检查所有细胞与字符串列,因为我有错误:该行中的java.lang.String cannot be cast to java.lang.Number
:Number value = (Number) aNumberValue;
。你能告诉我如何限制检查只有一列(ID = 1)?
编辑编辑编辑
好吧,我发现如何限制我的渲染。现在我有代码:
class TableRendererExample extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
int i = (int) value;
System.out.println(value);
c.setForeground(Color.GREEN);
return c;
}
}
我的问题是...为什么当我尝试打印值是工作,但是当我尝试投对象(值)整数i有例外:java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
。当我打印时,只有值,但问题在于投射...
您可以根据您获取的列索引作为参数进行委托。
从概念上讲,它应该工作如下
public Component getTableCellRendererComponent(JTable aTable, Object aNumberValue,
boolean aIsSelected, boolean aHasFocus, int aRow, int aColumn) {
if (aColumn != MY_INTEGER_COLUMN_INDEX)
// Use the default cell renderer component for
// any column except for the Integer column
return super.getTableCellRendererComponent(
aTable, aNumberValue, aIsSelected, aHasFocus, aRow, aColumn
);
// special handling for the Integer column
if (aNumberValue == null) {
return this;
}
Number value = (Number) aNumberValue;
if (value.doubleValue() < 0) {
// do something with renderer
} else {
// do something with renderer
}
return this;
}
关于你的编辑,我只能重申carmickr's answer:
-
当然
- ,如果你想投你该列的对象到
Integer
,您必须确保表模型实际上返回整数值。默认情况下,DefaultTableModel
仅返回字符串,因为这些是用户可以键入的值 - 阅读tutorial和JTable文档。定制JTable中是非常复杂的,所以你一定要了解如何JTable的作品,模特是如何关联等
要将渲染器添加到特定的列在表中的代码应该是这样的:
table.getColumnModel().getColumn(0).setCellRenderer(customRenderer);
I'm trying to render (only integer column) cell if value is < 0.
创建自定义渲染器,最简单的方法就是做修改显示的值:
class MyRenderer extends DefaultTableCellRenderer
{
public MyRenderer
{
setHorizontalAlignment(JLabel.RIGHT);
}
@Override
public setValue(Object value)
{
Number number = (Number)value;
if (number >= 0)
number = null;
super.setValue(value);
}
}
呦您还需要覆盖TableModel的isCellEditable(...)
方法或JTable返回Integer.class,并且必须将Integer值存储在TableModel中。
阅读Swing教程How to Use Tables中的部分。 TableToolTipsDemo
有一个具有不同数据类型的表的例子。
编辑过的第一篇文章,你能看看这个吗? –
@ J.Carrer,参见编辑。 – camickr
好的,但当它不是myIntegerColumn,如果renderer对象,我想改变呢? –
“问题是你必须为整个表定义一个TableCellRenderer。”[不,你没有。](http://docs.oracle.com/javase/8/docs/api/javax/swing /table/TableColumn.html#setCellRenderer-javax.swing.table.TableCellRenderer-) – VGR
好的,那么你能告诉我应该使用什么来修复它只有一列? –