Как эффективно отобразить значок в GWT только в той строке, в которую пользователь нажал мышью? - PullRequest
0 голосов
/ 20 января 2010

Мне нравится этот эффект (который также используется здесь в StackOverflow для удаления комментариев), когда при вводе мыши появляется значок, который удаляет эту строку.Если мышь не попадает ни в одну строку, значок отсутствует вообще.

Я решил эту проблему в своем приложении GWT, но не очень доволен решением, поскольку кажется, что оно потребляет много ЦП.Что я сделал: в каждой строке есть значок с setVisible(false) в начале.К таблице я добавляю MouseMoveHandler, и если мышь попадает в строку, это изображение становится видимым.Еще один MouseOutHandler добавлен в таблицу, которая скрывает каждое изображение, если мышь покидает стол.

Видите ли вы альтернативу для эффективного решения этой проблемы?

Ответы [ 3 ]

1 голос
/ 21 января 2010

Помимо использования только одного значка, распространенной ошибкой является создание более одного обработчика. Использование множества обработчиков для выполнения одной и той же задачи приводит к тому, что ваш браузер завален объектами.

Вместо

for (final MyRowWidget row : rows) {
    row.addMouseMoveHandler(new MouseMoveHandler() { // a new one every time is bad
        public void onMouseMove(MouseMoveEvent event) {
            row.doShowImage();
        }
    });
}

У

private static final MouseMoveHandler THE_ONE_AND_ONLY = new MouseMoveHandler() {
    public void onMouseMove(MouseMoveEvent event) {
        MyRowWidget rowWidget = (MyRowWidget) event.getSource();
        rowWidget.doShowImage();
    }
});

...

for (HasAllMouseHandlers row : rows) {
    row.addMouseMoveHandler(THE_ONE_AND_ONLY);
}
1 голос
/ 20 января 2010

Поскольку у пользователя никогда не будет мышки более чем в одной строке за раз - пытались ли вы создать экземпляр только одного значка, а затем прикрепить / удалить его из каждой строки на MouseMoveHandler / MouseOutHandler? Результат, скорее всего, будет другим. Кроме того, что вы используете для мониторинга использования процессора?

0 голосов
/ 20 января 2010

Почему бы вам просто не использовать панель с изображением на ней и не переместить панель в соответствующее место в строке, в которой находится курсор, используя MouseMoveHandler/ MouseOutHandler?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...