2011-05-20 98 views
0

我已經JTable中添加一個組合框,將添加代碼如下:在Java中的JTable中添加JCombobox時出現問題?

Vector<String> header = new Vector<String>(); 
Vector data = new Vector(); 
String[] h = new String[]{"Music", "Movie", "Sport"}; 
header.add("Code"); 
header.add("Name"); 
header.add("Salary"); 
header.add("Hobby"); 
loadData(); // Add some data to the table 
DefaultTableModel tblModel; 
tblModel = (DefaultTableModel) this.tblEmp.getModel(); 
tblModel.setDataVector(data, header); 

// Adding combobox to the last column 
TableColumn hobbyColumn = tblEmp.getColumnModel().getColumn(3); 
hobbyColumn.setCellEditor(new MyComboBoxEditor(h)); 

事情能正常工作,直到我使用的代碼動態添加一個新行到表:

Vector v = new Vector(); 
v.add("E333"); 
v.add("Peter"); 
v.add(343); 
v.add(""); // This last colum is the combobox so I put it as "" 

data.add(v); 
tblEmp.updateUI(); 

數據是添加到表中,但不能再選擇最後一列中的組合框。單擊行時仍然顯示組合框,但無法選擇值。 我該如何處理這個問題?

+2

我猜測我們無法根據未顯示的代碼找出問題所在,也無法發佈所有代碼。最好創建一個我們可以測試和修改並證明你的問題的小型可編譯和可運行程序,[sscce](http://sscce.org) – 2011-05-20 02:42:30

+1

至少,你必須向我們展示MyComboBoxEditor的代碼,它是可能是問題的根源。另外,你不應該直接將新行添加到你的'data' Vector中,而是使用'tblModel.addRow()',它會自動觸發UI更新。順便說一下,updateUI()不是刷新表,而是改變它的LAF,因此你應該從不**使用它。 – jfpoilpret 2011-05-20 10:21:58

+0

根據你的問題,你已經得到了所有的幫助。在您發佈您的SSCCE之前,我們將無法提供任何其他幫助。 – camickr 2011-05-21 15:03:27

回答

2

切勿使用updateUI()方法。閱讀API以查看此方法實際執行的操作。它與改變模型中的數據無關。

JTable已經支持組合框編輯器,所以不需要創建自定義的MyComboBoxEditor。閱讀JTable API,並按照「如何使用表格」的Swing教程的鏈接,查看使用組合框作爲編輯器的工作示例。