В SmartGWT, какое событие сообщает вам, если что-то рисуется? - PullRequest
0 голосов
/ 05 марта 2012

Например, у меня есть TreeGrid, и я добавил ContextMenu к TreeGrid. Теперь я хочу нарисовать ContextMenu только тогда, когда пользователь щелкнет правой кнопкой мыши по узлу листа. Моя идея состоит в том, чтобы определить, когда ContextMenu собирается быть нарисованным, и проверить, является ли узел, щелкнувший правой кнопкой мыши, узлом Leaf:

  • Если узел является листом, нарисуйте ContextMenu
  • Если узел НЕ лист, отмените розыгрыш

Но какое событие обрабатывает рисование компонента?

UPDATE:

showContextMenuHandler не будет работать. На самом деле это ошибка SmartGWT, потому что если я скажу contextMenu.show (), я получу 2 контекстных меню: одно из SmartGWT (того, которое я сделал) и второе из браузера который содержит такие элементы, как (следующая страница, предыдущая страница, выберите Все, источник страницы, ..). то же самое касается LeafContextClickHandler, ...

Вот почему я хочу добавить обработчик рисования для самого ContextMenu, чтобы он не рисовался в особых случаях.

Вот изображение, объясняющее ошибку:

enter image description here

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Есть несколько способов сделать это. У вас должна быть ссылка на рисуемый компонент. Затем вы можете добавить DrawHandler, VisibilityChangedHandler или, в случае примера, ShowContextMenuHandler.

В вашем примере, однако, я думаю, что лучший способ реализовать этот механизм - использовать LeafClickHandlers и FolderClickHandlers в TreeGrid.

0 голосов
/ 06 марта 2012

Ваша проблема с ShowContextMenuHandler - это не ошибка, а скорее «особенность» SmartGWT. В любом случае, если вы не хотите показывать меню браузера, все, что вам нужно сделать, это остановить распространение события в браузере. Это может быть легко достигнуто с помощью следующего фрагмента кода:

addShowContextMenuHandler(new ShowContextMenuHandler() {

        @Override
        public void onShowContextMenu(ShowContextMenuEvent event) {
            //Do not propagate to the browser's menu!
            event.cancel();
            //Continue with your code .... 
        }
    }
...