JTable の列がアルファベット化されていない場合、getSelectedRows() を使用して行の値を問題なく取得できます。ただし、ユーザーが列名をクリックし、その列で行がアルファベット順に並べ替えられている場合、getSelectedRows() は現在選択されている行ではなく、アルファベット順に並べ替える前に最初にあった行を返します。
列がアルファベット順になっているときに、現在選択されている行を取得するにはどうすればよいですか?
JTable の列がアルファベット化されていない場合、getSelectedRows() を使用して行の値を問題なく取得できます。ただし、ユーザーが列名をクリックし、その列で行がアルファベット順に並べ替えられている場合、getSelectedRows() は現在選択されている行ではなく、アルファベット順に並べ替える前に最初にあった行を返します。
列がアルファベット順になっているときに、現在選択されている行を取得するにはどうすればよいですか?
このコードを使用すると、視覚的に選択した正しい行が得られます。
int[] row_indexes=jTable1.getSelectedRows();
for(int i=0;i<row_indexes.length;i++){
domain=jTable1.getValueAt(row_indexes[i], 1).toString();
System.out.println(this, domain);
}
private void selectRow() {
//retrieving the selected row index
int row = jTable1.getSelectedRow();
//if a single row is selected from the table, take each cell values into the controls
if (jTable1.getRowSelectionAllowed())
{
selectedJobId = Integer.parseInt(jTable1.getValueAt(row, 0).toString());
jTextField_JobName.setText(jTable1.getValueAt(row, 1).toString());
jTextField_ExpDate.setText(jTable1.getValueAt(row, 3).toString());
jComboBox_JobCat.setSelectedItem(jTable1.getValueAt(row, 4).toString());
jComboBox_JobSubCat.setSelectedItem(jTable1.getValueAt(row, 5).toString());
}
}
少し遅いかもしれませんが、とにかくこれを投稿しようと思いました。
JTable メソッド convertRowIndexToModel(row) を見てください。行番号がソートされていないかのように、行番号を返します。