我发现了类似的主题和阅读: 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