2011-12-02 102 views
3

我有JTable。其中我有幾列。在其中3我有JComboBox(每列的每個單元都有其獨特JComboBox - 即整個第1列 - 「蘋果」,「bannana」;第2列 - 「紅」,「藍」;第3列 - 「貓」,「狗」 )。在節目開始時,我希望它們是空的。稍後幾個行動事件後,我正在填補他們。問題是,僅爲每列添加相同值的JComboBox是不夠的。因爲在將JComboBox添加到JTable之後,必須執行TableCellRenderer並將其擴展爲DefaultCellEditor,否則在表中看不到JComboBox,除非您單擊它(TableCellRenderer錯誤),而不是comboBox,您只需在單元格中獲取Object.toString()行DefaultCellRenderer錯誤)。所以,我應該怎麼處理JComboBoxTableCellRendererDefaultCellEditor這樣我就可以動態地全JComboBox這是JTable變化值。JTable,JComboBox動態值

+0

聽起來像你這樣做不對(或我誤解:-) - 你從來沒有在一個_component_細胞。相反,你有一個模型,其中保存_data_和呈現器/編輯器在表上滋潤數據 – kleopatra

+0

所以你認爲在表中我應該舉例如字符串[]和當我覆蓋渲染/編輯器我得到它可視化? – Minutis

回答

3

還有一件事你應該考慮。它正在使用一個模型。該模型將舉行蘋果,香蕉和貓和狗。 JTable和JComboBox分別有AbstractTableModelComboBoxModel。查看教程中的示例。

+0

就像我前面提到過的兩次,如果您在一個組合框中選擇了值,那麼所有具有相同模型(全部列)的組合框都會被選中,並且具有相同的值。 – Minutis

+0

每個JComboBox應該有它自己的模型。 –

+0

好的,那麼我應該如何在800個類似的JComboBoxes中插入值,而不必在每個JComboBox中進行更改?現在我改變它爲一個模型,並且所有組合框都得到它。 – Minutis

0

在我看來,你就必須同時覆蓋的TableCellRenderer和DefaultCellEditor返回相同的JComboBox。因此,您可以將JComboBox作爲參數傳遞給TableCellRenderer和DefaultCellEditor,然後讓getCompleteBox或getEditor例程返回該類的JComboBox。

+1

不太清楚你的意思是「相同的JComboBox」 - 如果你真的(因爲我猜)是指「同一個實例」,那麼這是錯誤的。永遠不會在編輯器和渲染器中共享相同的組件實例! – kleopatra

+0

kleopatra,這是爲什麼?爲什麼我不應該分享它?我應該使用相同型號的2個實例還是smth?但是然後選擇會變得複雜,正如我上面提到的,如果您在一個組合框中選擇了值,那麼具有相同模型(所有列)的所有組合框都將以相同的值進行選擇。 – Minutis

+0

其實,我不認爲渲染器中的組合框會起作用,因爲渲染器只是創建圖形然後被複制。然而在編輯器中,一次只顯示一個,所以你不需要很多副本 - 編輯器只需將它與必要的值和當前選擇一起播種。 – vextorspace

2

請閱讀Using a Combo Box as an Editor,因爲JTable的JComboBox的認識爲渲染器和編輯器也實例here,和例如約EachRowEditor

+0

謝謝你的幫助。但仍然存在問題。我在一個柱子中爲所有JComboBox使用一個模型。當我填寫或刪除值是可以的。但是,如果我在一個單元格中選擇一個組合框,則所有列都選擇相同的值。 – Minutis

+0

'我在一個colum中爲所有JComboBox使用了一個模型',它是正確和正確的輸出,但是爲了重新分配代碼,你必須將它分離到分離的Models中,否則你必須將項目從硬編碼範圍1-10中分離到COmboBOxModel ,11-20等。那不是個好主意...... – mKorbel

+0

對不起,沒有真正理解你的意思。問題不在於增加值。如果我使用一個模型,我可以像我想要的那樣添加數值(在所有JComboBox's中的一列中,更改都是精確地)。但問題是,當我在一個JComboBox中選擇任何內容時,每個具有相同模型的其他JComboBox都會選擇相同的值。 – Minutis