The problem is that you are grabbing the value stored at the column and row that you select in your table, when all you want is the time value stored at the row heading.
The method getSelectedRow just returns the row number. With a couple of modifications you can grab the time from the rowNames array.
Here I added one more variable which uses the value from tmpTF to access the correct row inside the rowNames array. Got to parse it into type Integer since it is an Object array.
CODE
int tmpTF = table.getSelectedRow();
int tmpNo = table.getSelectedColumn();
int tmpTime = Integer.parseInt(rowNames[tmpTF][0].toString());
Next modifiy the call to the BookingDetail constructor to use this new variable in place of tmpTF.
CODE
BookingDetail BD = new BookingDetail(loggedUser, tmpBDate, tmpTime, tmpNo);
Now it will grab the time that is stored in that row of the table.