Java - JTable自定义TableCellRenderer +允许重新排序

时间:2015-09-03 11:51:41

标签: java swing jtable tablecellrenderer

我的代码很长,所以我正在举例说明我的问题。

我有一个带有2列的JTable,两列都包含数字。我需要一列,让我们说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);

到目前为止一切正常,两列都显示正确的值并且渲染正确。 当我想让Reordering Allowed = true时,问题就开始了。

只要在正在运行的软件中切换列,就会切换列及其值......

但不是渲染器

这会导致呈现A列而B列成为标准,反之亦然。

这可能是因为我为特定列索引设置了类,但我不知道我应该怎么做。

1 个答案:

答案 0 :(得分:1)

感谢@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);

        }