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

Swing 在默认单元格编辑器和渲染器JTable中设置组合框值,swing,jtable,tablecellrenderer,Swing,Jtable,Tablecellrenderer,我想首先在默认单元格编辑器组合框中选择一个值。当我在渲染器或编辑器中设置该值时,即使用户更改该值,组合也始终显示相同的值,因为我正在渲染器中设置该值。如何在渲染器中设置组合框值并允许用户对组合框进行更改?下面是我的代码: public TableCellRenderer getCellRenderer(int row, final int column) { if (column == 1) { TableCellRenderer renderer = new TableCell

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

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);
}

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


我还想将组合值设置为数组中的特定值。但由于渲染器中的am设置,即使用户更改组合值,它也始终显示相同的值。如何修复此问题?

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

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

return null;
}
这使得column=1处的组合框始终显示一个特定项。现在我已经删除了这个。单元编辑器中的组合框值会根据用户选择而变化

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


干杯。

作为渲染器的组合没有多大意义:它的使用本质是从下拉列表中选择一个值,但下拉列表在渲染组件中永远不可见。另外:不要在每次调用getCellRenderer时都重新创建新的渲染器/渲染组件,而是重复使用相同的组件instance@kleopatra我不明白你所说的“但下拉列表在渲染组件中永远不可见”是什么意思。根据我的代码,我可以在任何必要的地方获得所有单元格中的combobox下拉列表。问题是,当combo显示时,我需要更改combo中的预选值。我可以得到下拉列表并进行选择。但是在选择之后,组合框只显示我在渲染器中设置的一个固定值。我希望单元格看起来像一个下拉框,用户应该知道他们可以从中选择一个值。有什么建议吗?谢谢