1

jTable で選択された行を取得するために、MouseEvent ( MouseClicked) を使用しました。それは正常に機能し、テーブルをクリックすると正しい行番号が表示されます。

jTable をナビゲートするために、新しいリスナー ( KeyPressed) を追加しました。上キーを押しても行番号が増えません。もう一度上キーを押すと、行数が更新されますが、以前の行数です。

private void jTable1KeyPressed(java.awt.event.KeyEvent evt) { 
    if(evt.getKeyCode() == evt.VK_UP){
     System.out.println("Key UP" + jTable1.getSelectedRow()); 
    } 

    if(evt.getKeyCode() == evt.VK_DOWN){ 
    System.out.println("Key DOWN" + jTable1.getSelectedRow()); 
    }
}

これは簡単なコードです。テーブルの最初の行をクリックして下向きのキーを押すと、出力は "Key DOWN0" になります。しかし、2 番目の行が選択されており、出力は "Key DOWN1" のはずです。

4

3 に答える 3

1

jTable で選択された行を取得するために、MouseEvent (MouseClicked) を使用しました。それは正常に機能し、テーブルをクリックすると正しい行番号が表示されます。

jTable をナビゲートするために、新しいリスナー (KeyPressed) を追加しました。上キーを押しても行番号が増えません。もう一度上キーを押すと、行数は更新されますが、以前の行数です

.

私はあなたがする必要があると思います

于 2013-08-13T08:49:48.087 に答える
1

@mKorbel は既に正しい回答を投稿しています: セマンティック要件に低レベルのリスナーを使用しないでください - ListSelectionModel/-Event はすべての低レベルの複雑な詳細を非表示にします :-)

詳細:

  • JTable の内部には、選択を変更する上/下キーへの keyBindings があります。
  • keyBindings はリスナーの後に提供されます

したがって、アプリケーション コードがイベントを認識した時点では、テーブルにはまだ反応する機会がありませんでした。出力しているのは、内部変更 (バインディングによってトリガーされる)前の選択です。

于 2013-08-13T13:54:26.800 に答える