我在JTable中有表。 2列包含String,1列包含Integer。如果值为<我正在尝试渲染(仅整数列)单元格有我的代码:
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;
}
问题是:我认为,该代码尝试使用String列检查所有单元格,因为我在该行中有错误: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;
}
}
我的问题是......为什么当我尝试打印值时它正在工作但是当我尝试将对象(值)转换为整数时我有异常:java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
。当我打印时,只有值,但问题在于铸造......
答案 0 :(得分:2)
要将渲染器添加到表格中的特定列,代码应为:
table.getColumnModel().getColumn(0).setCellRenderer( customRenderer );
如果值为&lt;我正在尝试渲染(仅整数列)单元格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或JTable的isCellEditable(...)
方法以返回Integer.class,并且必须在TableModel中存储Integer值。
阅读How to Use Tables上的Swing教程中的部分。 TableToolTipsDemo
有一个包含不同数据类型的表的示例。
答案 1 :(得分:0)
您可以根据您获得的列索引作为参数进行委派。
从概念上讲,它应该如下工作
-webkit-animation: rotarIz 2s -0.5s linear 10;
animation: rotarIz 2s -0.5s linear 10;
关于您的修改,我只能重述carmickr's answer:
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;
}
,则必须确保表模型实际返回Integer值。默认情况下,Integer
仅返回字符串,因为这些是用户可以键入的值