2011-06-17 54 views
0

我在我的JTable中使用JComboBox作爲CellRenderer。
一切工作正常JComboBox顯示相應行的正確項目。JComboBox as CellRenderer沒有設置正確的值

我目前正在處理的問題是,當我在JComboBox中選擇一個新值(例如第9行)時,該值設置正確,但是當我嘗試更改下一行中的值時,JComboBox(例如在第10行)自動設置之前的行的值。

我創建了一個DropDownCellRenderer類,它擴展了JComboBox並實現了TableCellRenderer,我認爲這已經足夠,但似乎DropDownCellRenderer對象對於每一行都是相同的。

table.getColumnModel().getColumn(3).setCellRenderer(new DropDownCellRenderer()); 
table.getColumnModel().getColumn(3).setCellEditor(new DefaultCellEditor(new DropDownCellRenderer())); 

我該如何避免每行都使用相同的對象?

+0

您的渲染器實現可能不正確,我們可以看到它嗎? – 2011-06-17 15:33:08

回答

2

查看您的渲染器的源代碼。

  1. 我不認爲你必須按名稱查找產品。 value傳給你產品,它來自您的表模型(如果它正確實施)。只需將value設置爲選定項目,它就可以工作。

  2. 要使渲染器正常運行,請根據isSelected參數更改其前景色和背景色。代碼應該如下所示:

    if (isSelected) { 
        setForeground(table.getSelectionForeground()); 
        super.setBackground(table.getSelectionBackground()); 
    } else { 
        setForeground(table.getForeground()); 
        setBackground(table.getBackground()); 
    } 
    
  3. 使您的初始值的數組成爲構造函數的參數。這會將您的渲染器轉換爲通用組合框渲染器。

1

聽起來好像是在組合框本身而不是表格模型中保存和顯示值。當您設置一個值並保存組合框值時,您需要更新模型