在默认单元格编辑器和渲染器JTable中设置组合框值

时间:2013-09-25 10:02:04

标签: swing jtable tablecellrenderer

我想在最初的默认单元格编辑器组合框中选择一个值。当我在渲染器或编辑器中设置时,即使用户更改它,组合也始终显示相同的值,因为我在渲染器中设置了值。如何在渲染器中设置组合框值并允许用户对组合进行更改?下面是我的代码:

public TableCellRenderer getCellRenderer(int row, final int column) {
if (column == 1) {    
    TableCellRenderer renderer = new TableCellRenderer() {

        @Override
        public Component getTableCellRendererComponent(JTable arg0, Object arg1,boolean arg2, boolean arg3, int row, int col) {             
            String text="";
            Component  comp;


            if(lovArray[row]!=null && lovArray[row].split("\\|").length>1)
            {
                JComboBox combo = new JComboBox(lovArray[row].split("\\|"));
                comp =combo;
                //combo.setSelectedItem(values[row]);
            }
            else
            {
                comp = CustomTable.super.getCellRenderer(row, col).getTableCellRendererComponent(arg0, arg1, arg2, arg3, row, col);
            }                               

            return comp;
        }
    };      

    return renderer;
}

return super.getCellRenderer(row, column);

}

在上面的代码中,我将仅在该特定行的值具有由“|”分隔的多个值时才显示组合。否则我将返回默认的渲染器。

我还想将组合值设置为数组中的特定值。但由于我在渲染器内设置,即使用户更改了组合值,它也始终显示相同的值。如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

对不起。这是我在代码的另一部分中犯的错误。在我的自定义表中,我覆盖了以下内容:

public Object getValueAt(int row, int col)
{
if(col==0)
{
    return variables[row];
}
else if(col==1)
{
    return values[row];
}

return null;
}

这使得列= 1的comboBox始终显示一个特定项。现在我删除了这个。并且单元格编辑器中的组合框值根据用户选择而变化。

我删除了渲染器并决定将其显示为默认单元格本身。当用户点击它时,我在DefaultCellEditor中创建了一个组合框,允许用户从下拉列表中选择一个值。

干杯。