Я просматриваю Google уже два дня, немного потерян.
Я могу легко вызвать событие, когда срабатывает щелчок правой кнопкой мыши.Это не проблема.Моя проблема заключается в том, что мне также нужно вызвать аналогичное событие, если / когда меню, вызываемое правой кнопкой мыши, закрывается без какого-либо выбора.
Это сводится к бизнес-необходимости: в списке есть списоктаблица, у таблицы есть флажки в крайнем левом столбце, чтобы показать, какие строки были выбраны.Поскольку эти флажки предназначены для использования в качестве ключа пользовательского интерфейса для определения того, какие строки будут обрабатываться, любое действие обработки проверяет состояние флажков, а не то, какие строки были выбраны.
Пользователи могут устанавливать флажки напрямую, чтобы сделатьдействие над одной или несколькими строками (с помощью кнопок в нижнем колонтитуле окна или с помощью меню, вызываемого правой кнопкой мыши).Тем не менее, также должна быть возможность сделать один активный выбор с помощью самого события правого щелчка, без необходимости явно снимать флажок.
В этом случае запускщелчок правой кнопкой мыши на записи автоматически установит этот флажок (независимо от того, был ли он уже выбран).Однако, если пользователь решает не выполнять никаких действий с этой строкой, этот флажок необходимо вернуть в прежнее состояние (либо отмеченный, либо не отмеченный, вызванный нажатием правой кнопки мыши).
Только передавая исходное состояние, мне не нужно заботиться об исходном состоянии, только о том, что оно применяется повторно, когда щелчок правой кнопкой мыши отменяется.Это позволяет успешно восстанавливать как проверенные, так и непроверенные исходные состояния.По сути, это позволяет отклонить случайный щелчок правой кнопкой мыши, не оставляя строку таблицы с установленным флажком каждый раз - это было бы нежелательным поведением.
К сожалению, я ненашел в Интернете любых примеров, которые говорят о нацеливании на увольнение из меню, вызываемого правой кнопкой мыши, и о том, как подключить действие к этому событию.
Мой код такfar это что-то вроде этого:
private void setListenerForItemsTable() {
tblItems.addMouseListener( new MouseAdapter() {
public void mousePressed( MouseEvent evt ) {
if ( view.showMaybePopup( evt ) ) {
rightClickEvent(); // Fires needed code on right-click popup appearance.
}
}
public void mouseReleased( MouseEvent evt ) {
if ( view.showMaybePopup( evt ) ) {
rightClickEvent();
}
}
} );
}
, который творит чудеса при создании всплывающего окна, вызываемого правой кнопкой мыши.Он работает чудесно .
Как FYI, код также имеет прослушиватель для самого меню, вызываемого правой кнопкой мыши, что позволяет обрабатывать выбор любого элемента в этом меню, вызываемом правой кнопкой мыши.:
private void setListenerForRightClickMenu() {
// Preview
mnuPreviewItem.addActionListener( (e)
-> {
previewItem();
} );
// Resend Fax
mnuResendItem.addActionListener( (e)
-> {
resendItem();
} );
/// etc...
}
Однако любая попытка использовать что-то вроде addFocusListener
в меню правой кнопки мыши так же, как addMouseListener
было прикреплено к таблице, вызывает исключение нулевого указателя;предположительно потому, что контекстное меню недоступно до тех пор, пока правый щелчок не будет запущен.
Предложения?