Проблема здесь в том, что щелчок правой кнопкой мыши действительно используется встроенным триггером всплывающего окна. Чтобы обойти это, переопределите метод JPopupMenu.show(...)
, подобный этому (примеры для JTable
, JList
и JTree
работают аналогично):
public class ExtJPopupMenu extends JPopupMenu {
[...]
@Override
public void show(final Component invoker, final int x, final int y) {
if (invoker instanceof JTable) {
final JTable table = (JTable) invoker;
final int selRow = table.rowAtPoint(new Point(x, y));
if (selRow > -1 && !table.getSelectionModel().isSelectedIndex(selRow)) {
table.getSelectionModel().setSelectionInterval(selRow, selRow);
}
}
// ensure the newly selected item is focused
invoker.requestFocus();
// now build the appropriate menu for the selected item
[...]
// finally show the menu
super.show(invoker, x, y);
}
}
Зарегистрируйте свой ExtJPopupMenu
экземпляр с вашей таблицей, используя table.setComponentPopupMenu(...)
.