2013-09-25 66 views
0

我想在默認單元格編輯器組合框中最初選擇一個值。當我設置內部渲染器或編輯器時,即使用戶更改它,組合鍵也始終顯示相同的值,因爲我在渲染器中設置了該值。如何在渲染器中設置組合框值並允許用戶對組合框進行更改?下面是我的代碼:在默認單元格編輯器和渲染器中設置組合框值JTable

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

}

在上面的代碼我要去顯示組合僅當該特定行的值具有由分隔的多個值「|」。否則我們將返回默認的渲染器。

我也想設置組合值爲一個數組中的特定值。但是由於在渲染器內部設置,即使用戶更改了組合值,它始終顯示相同的值。如何解決這個問題?

+0

作爲渲染器的組合沒有多大意義:它的用法本質是從下拉列表中選擇一個值,但下拉將永遠不會在渲染組件中可見。另外:不要在每次調用getCellRenderer時重新創建一個新的渲染器/渲染組件,而是重新使用同一個實例 – kleopatra

+0

@kleopatra我沒有得到你的意思,但下拉將永遠不會在渲染組件中可見「 。根據我的代碼,我可以根據需要在所有單元格中獲取組合框下拉列表。事情是我需要改變預選值從組合顯示時。我能夠獲得下拉菜單並進行選擇。但在選擇之後,組合框只顯示一個我在渲染器中設置的固定值。我希望單元格看起來像一個下拉框bcoz用戶應該知道他們可以從中選擇一個值。有什麼建議麼?謝謝 –

回答

0

對不起。這是我在代碼的另一部分中犯的錯誤。在我的自定義表中,我重寫了以下內容:

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

return null; 
} 

這使得列= 1的組合框始終顯示一個特定的項目。現在我已經刪除了這個。並且單元格編輯器中的組合框值根據用戶選擇而改變。

我已經刪除了渲染器,並決定將其顯示爲默認單元格本身。當用戶點擊它時,我在DefaultCellEditor中創建了一個組合框,允許用戶從下拉列表中選擇一個值。

乾杯。

相關問題