私は同様のトピックを見つけてこれを読みました: Java:選択された行のインデックスはソートされても変更されません
JTableがユーザーによってソートされたときに行インデックスを追跡する方法は?
相互に相関している3つのテーブルを使用します
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_correctIDNumber」
次のステップでは、detailTableインデックスの行を正しい「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" );
しかし、私は常にvorgangListではなくdetailTableのインデックス番号を取得します。
例でより詳細に:私は答えをしようとしました。これが私のコードです:
//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
ほら、私はすでに何かがおかしい。「match」変数の「selectedObject」に格納されているのと同じ値が必要です(700はid=450ではなくid=700である必要があります)。だから私はさらに助けてください。よろしくお願いします