我發現了類似的主題和閱讀: Java: Selected rows's index does not changes when sorted的TableModel convertRowIndex
How to Keep Track of row index when JTable has been sorted by the user?
我用三個表並在相關的海誓山盟
客戶 .KUNDENNUMMER = 過程 .KUNDENNUMMER PROCESS .ID = VORGANG_AUGENPAAR .VORGANG_ID
首先我選擇我的「主表」的客戶,那麼「詳細信息表」顯示我的所有從操作行至該客戶= OK。 (主表=全部細節表=進程列表) 現在我的子表顯示我所有的VORGANG_AUGENPAAR行到這個過程= OK
但我有一個邏輯的麻煩,如果我想插入新行到子表。表格「detailTable」中的PROG.ID。在我的detailTable中,PROCESS.ID以正確的方式打印出來。
與下面的代碼我得到正確的ID:
int selectedRowIndex = detailTable.getSelectedRow();
int selectedColumnIndex = 2;
//get the correct ID:
int selectedObject = (int) detailTable.getModel().getValueAt(selectedRowIndex, selectedColumnIndex);
System.out.println(selectedObject + "_correct ID Number");
然後我得到這樣的結果:「700_correct身份證號碼」
在下一步中,我嘗試了詳細tableIndex行轉換爲正確的「operationList」模型。但也有一些是錯誤的:
//this is wrong
opticanuova.task.Vorgang vor = vorgangList.get(detailTable.convertRowIndexToModel(selectedRowIndex));
System.out.println(vor + "_wrong value");
與上面的代碼,我得到這樣的結果:「opticanuova.Vorgang [ID = 450] _wrong值」
我做了一些錯誤的轉換細節表的索引來處理列表索引。所以請給我的建議。我也嘗試了用於測試的索引號下面的代碼:
//testing vor index value
int test2 = (int) detailTable.convertRowIndexToView(selectedRowIndex);
System.out.println(test2 + "IndexConverted_ToView_test2");
int convertedRowAtPoint = detailTable.convertRowIndexToModel(selectedRowIndex);
System.out.println(convertedRowAtPoint + "IndexConverted_ToModel: false mapped Row");
但我總是得到詳細信息表的索引號,而不是進程列表。
更詳細的例子: 我試圖做的答案。 現在這裏是我的代碼:
//this sequence get the correct ID:
int selectedRowIndexInView = detailTable.getSelectedRow();
int selectedRowIndexInModel = detailTable.convertRowIndexToModel(selectedRowIndexInView);
int idColumnIndex = 2;
int selectedObject = (int) detailTable.getModel().getValueAt(selectedRowIndexInModel, idColumnIndex);
//this is wrong
opticanuova.task.Vorgang match = vorgangList.get(detailTable.convertRowIndexToModel(selectedRowIndexInModel));
//print out:
System.out.println(selectedRowIndexInView + " = selectedRowIndexInView ");
System.out.println(selectedRowIndexInModel + " = selectedRowIndexInModel ");
System.out.println(selectedObject + " = selectedObject");
System.out.println(vorgangList + " = vorgangLIst");
System.out.println(match + " = match");
,這是結果:
1 = selectedRowIndexInView
1 = selectedRowIndexInModel
700 = selectedObject
[opticanuova.Vorgang[ id=400 ], opticanuova.Vorgang[ id=450 ], opticanuova.Vorgang[ id=550 ], opticanuova.Vorgang[ id=600 ], opticanuova.Vorgang[ id=650 ], opticanuova.Vorgang[ id=700 ]] = vorgangLIst
opticanuova.Vorgang[ id=450 ] = match
你看,我已經有些不對勁。我需要有相同的值存儲在「SelectedObject」在我的「匹配」變量(700應該是ID = 700,而不是ID = 450)。所以請給我進一步的幫助。此致
你還是沒有說什麼vorgangList。這是支持你的模型的列表嗎?如果是這樣,列表的索引與模型中的索引相同。所以你需要'opticanuova.task.Vorgang match = vorgangList.get(selectedRowIndexInModel);'。正如我已經說過的,selectedRowIndexInModel已經是模型中的一個索引。所以將它轉換爲模型沒有意義:'detailTable.convertRowIndexToModel(selectedRowIndexInModel)'根本沒有意義。 – 2013-02-28 11:05:39
嗨,vorgangList存儲了表格Vorgang中的所有條目。 jTable「detailTable」通過customernumber過濾表Vorgang。所以在「detailTable」中是一個過濾的表格。這是vorgangQuery + List的代碼vorgangQuery = java.beans.Beans.isDesignTime()? null:entityManager.createQuery(「SELECT v FROM Vorgang v」); vorgangList = java.beans.Beans.isDesignTime()? java.util.Collections.emptyList():vorgangQuery.getResultList();' – birtprofi 2013-03-04 15:13:18
對不起,但如果我添加註釋Formating不見了。通過以下代碼:「opticanuova.task.Vorgang match = vorgangList.get(selectedRowIndexInModel);」我也得到了錯誤的價值。這是匹配的結果:「opticanuova.Vorgang [id = 550] =匹配」。它是vorgangList和detailTable的索引#3。但是對於正確的值,detailTable中的索引#3必須是vorgangList中的索引#4。是否有可能在vorgangList中搜索正確的ID號,然後找到正確的索引號? – birtprofi 2013-03-04 15:30:10