Извиняюсь за ответ на мой собственный вопрос, но простой обходной путь для моей проблемы - это захват индекса вкладки при первом щелчке в моем MouseAdapter и выполнение двойного щелчка по работе, используя захваченное значение, а не tabPane.getSelectedIndex(), которая является текущей при обнаружении второго щелчка:
if (evt.getClickCount() == 1 && evt.getComponent() == tabPane) {
currentTabIndex = tabPane.getSelectedIndex();
}
else if (evt.getClickCount() == 2 && evt.getComponent() == tabPane) {
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
//double-clicked a tab
... {snip}
}
Это не препятствует перемещению строк вкладок, но первая нажатая вкладка выбирается для отображения, как и ожидалось пользователем.
Кроме того, наличие отдельного интерактивного элемента управления, позволяющего пользователю запрашивать полное отображение содержимого вкладки, вероятно, предпочтительнее этого неуклюжего двойного щелчка, как предложил camickr (спасибо!).