我发现了类似的主题并阅读了以下内容: Java: Selected rows's index does not changed when sorted
我使用三个相互关联的表
KUNDE .KUNDENNUMMER = VORGANG .KUNDENNUMMER VORGANG .ID = VORGANG_AUGENPAAR .VORGANG_ID
首先我在“masterTable”中选择我的客户,然后“detailTable”显示从 VORGANG 到该客户的所有行 = OK。(masterTable = list, detailTable = vorgangList) 现在我的 subTable 显示了从 VORGANG_AUGENPAAR 到这个 VORGANG = OK 的所有行
但是我有一个逻辑问题,如果我想在 subTable 中插入一个新行。对于插入,必须从表“detailTable”中获取正确的 VORGANG.ID。在我的 detailTable 中,VORGANG.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 ID Number”
在下一步中,我尝试将 detailTable 索引 Row 转换为正确的“vorgangList”模型。但是有一点不对:
//this is wrong
opticanuova.task.Vorgang vor = vorgangList.get( detailTable.convertRowIndexToModel(selectedRowIndex));
System.out.println( vor + "_wrong value" );
使用上面的代码,我得到了这个结果:“opticanuova.Vorgang[id=450]_wrong value”
我将 detailTable 索引转换为 vorgangList 索引时出错了。所以请给我你的建议。我还尝试了以下代码来测试索引号:
//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" );
但我总是得到 detailTable 的索引号,而不是 vorgangList 的索引号。
更详细的例子:我试着做答案。这是我的代码:
//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)。所以请给我进一步的帮助。此致