MouseOver из FlexTable с GWT - PullRequest
       32

MouseOver из FlexTable с GWT

1 голос
/ 15 января 2011

Привет всем У меня есть FlexTable, который содержит изображения (по одному для каждой ячейки). Хотелось бы, чтобы у меня было событие, когда вы наводите курсор мыши на ячейку, появляется всплывающее окно, которое должно содержать заголовок изображения. Кто-нибудь может мне помочь?

Я пытался вставить этот код, делает то, что он должен делать (по крайней мере, для меня), но всплывающее окно остается активным, когда я убираю указатель мыши. Где я ошибаюсь?

private FlexTable createHTML(ImageResult result,int row,final int i,int currentCol) {

 immagine[i]=new Image(result.getThumbnailUrl());
 resultsTableImm.setWidget(row, currentCol, immagine[i]);
 titleImm[i]=result.getTitleNoFormatting();
 contentImm[i]=result.getContentNoFormatting();
 urlImm[i]=result.getUnescapedUrl();

 immagine[i].addMouseOverHandler(new MouseOverHandler() {

       @Override
        public void onMouseOver(MouseOverEvent event) {

            PopupPanel p = new PopupPanel(true);
            Widget source = (Widget) event.getSource();
            int x = source.getAbsoluteLeft() + 10;
            int y = source.getAbsoluteTop() + 10;
            p.add(new HTML("<b>"+titleImm[i]+"</b><br>"+contentImm[i])); 
            p.setPopupPosition(x, y);
        p.show();
        }
    });

    return resultsTableImm;
            }

Спасибо и хорошего дня

JD

Ответы [ 3 ]

1 голос
/ 17 января 2011

FlexTable не имеет onMouseOverHandler. Он имеет только clickHandler. Таким образом, вы не можете прикрепить курсор мыши к таблице (ячейке). Один из способов - добавить addMouseOverHandler к изображению, отображающему их во всплывающем окне, похожем на

Image image= new Image();
image.addMouseOverHandler(new MouseOverHandler() {

        @Override
        public void onMouseOver(MouseOverEvent event) {
            PopupPanel p = new PopupPanel(true);
            Widget source = (Widget) event.getSource();
            int x = source.getAbsoluteLeft() + 10;
            int y = source.getAbsoluteTop() + 10;

            p.add(image); 
            p.setPopupPosition(x, y);
            p.show();
        }
    });

Если вы используете gwt2.1, тогда я предлагаю вам использовать CellTable

Посмотрите на этот пример Таблица ячеек

0 голосов
/ 02 августа 2012

Сводя пример Xorty к основам настоящего вопроса, вы можете адаптировать следующее расширение FlexTable:

import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.FlexTable;

public class PTable extends FlexTable {

    public static final String ROW_STYLE_NAME  = "pm-PTable-row";

    PTable() {
        setStyleName("pm-PTable");
        sinkEvents(Event.ONMOUSEOVER |Event.ONMOUSEOUT); 
    }

    @Override
    public void onBrowserEvent(Event event) {
        super.onBrowserEvent(event);
        Element td = getEventTargetCell(event);
        if (td == null) return;
        Element tr = DOM.getParent(td);
        switch (DOM.eventGetType(event)) {
            case Event.ONMOUSEOVER: {
                tr.addClassName(ROW_STYLE_NAME + "-mouseover");
                break;
            }
            case Event.ONMOUSEOUT: {
                tr.removeClassName(ROW_STYLE_NAME + "-mouseover");
                break;
            }
        }
    }
}
0 голосов
/ 15 января 2011

Вы можете создать собственный виджет с зарегистрированным обработчиком onmouseover и поместить его в гибкую таблицу (идея не в том, чтобы добавить слушателя для ячейки, а в самом виджете, который находится в ячейке).

Или вы можетепопробуйте что-то вроде этого: http://www.java2s.com/Code/Java/GWT/TableMouseOverEvent.htm

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