我的代码很长,因此我在简要说明一下这个问题。
我有一个JTable有2列,都包含数字。我需要一列,比方说B列以不同的方式呈现。这就是为什么我创建了一个客户TableCellRenderer,它将数字转换为JPanel(几个图标,文本等)的原因。创建JTable时,我将B列的类设置为JPanel,将A列的类设置为Number:
table = new JTable(model)
{
public Class getColumnClass(int column)
{
if(column == 1)
{
return Number.class;
}
if(column == 2)
{
return JPanel.class;
}
return super.getColumnClass(column);
}
}
table.setDefaultRenderer(JPanel.class, (TableCellRenderer) new RendererCurrency());
DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment(JLabel.CENTER);
table.setDefaultRenderer(Number.class , centerRenderer);
到目前为止,一切工作正常,两列均显示正确的值并正确显示。当我想要重新排序允许= true时,问题就开始了。
在运行软件中切换列后,列及其值将被切换...
但不是渲染器
这将导致A列被渲染,而B列成为标准,反之亦然。
这可能是因为我为特定的列索引设置了类,但是我不知道该怎么做。
最佳答案
感谢@Manu,我能够通过将列索引转换为视图来解决此问题:
public Class getColumnClass(int column)
{
if(column == table.convertColumnIndexToView(1))
{
return Number.class;
}
if(column == table.convertColumnIndexToView(2))
{
return JPanel.class;
}
return super.getColumnClass(column);
}