is there any way to trigger a method when users mouse over the Title of a column in GWT-CellTable?

233 views
Skip to first unread message

Tom

unread,
Jun 12, 2014, 10:51:03 AM6/12/14
to google-we...@googlegroups.com

Ok, I have a CellTable CellTable<List<String>> table = new CellTable<List<String>>();

& a nameColumn IndexedColumn nameColumn=new IndexedColumn(0)

then table.addColumn(nameColumn, "Name");

I want that when user mouseOver the title of nameColumn it will trigger methodX

The table.addCellPreviewHandler only works for the cell inside the table not for the Title or header of the column

table.addCellPreviewHandler(new Handler<List<String>>(){

        @Override
        public void onCellPreview(
                        CellPreviewEvent<List<String>> event) {

        if ("mouseover".equals(event.getNativeEvent().getType())) {
                        int col=event.getColumn();
                        int row=event.getIndex();
        //call sthing here
        }
});

is there any simple method like table.addCellPreviewHandler that help me to solve my problem? I don't like custom Header or custom column?

http://stackoverflow.com/questions/24187482/is-there-any-way-to-trigger-a-method-when-users-mouse-over-the-title-of-a-column

Tom

unread,
Jun 12, 2014, 6:44:54 PM6/12/14
to google-we...@googlegroups.com
I tried



Header<String> nameColumnHeader = new Header<String>(new ClickableTextCell()) {
       
@Override
       
public String getValue() {
           
return "Name";
       
}
       


       
@Override
       
public final void onBrowserEvent(Context context, Element elem, NativeEvent event) {
         
if ("mouseover".equals(event.getType())) {
         
System.out.println("est");
         
SafeHtmlBuilder sb=new SafeHtmlBuilder();
         sb
.appendHtmlConstant("<b>");
 
 sb
.appendHtmlConstant("<font color=\"blue\">");
 sb
.appendEscaped("Subject Name");
 sb
.appendHtmlConstant("</font></b>");
 
         meaningMessagesPopup
.setWidget(new HTML(sb.toSafeHtml()));
       
 
 
int left = event.getClientX() -140;
       
int top = event.getClientY() +30;
        meaningMessagesPopup
.setPopupPosition(left, top);


           
// Show the popup
        meaningMessagesPopup
.show();
         
}
         
else if("mouseout".equals(event.getType())){
         meaningMessagesPopup
.hide();
         
}
       
}
   
};
table.addColumn(nameColumn, nameColumnHeader);
But seem Gwt did not recognize "mouseover".equals(event.getType())

Jens

unread,
Jun 12, 2014, 7:10:40 PM6/12/14
to google-we...@googlegroups.com
ClickableTextCell only listens for click and keydown events so Header.onBrowserEvent() will never be called for mouseover events. You must create your own Cell class (possibly extending any of GWTs cells) and call the super constructor AbstractCell(String... consumedEvents) if possible or override AbstractCell.getConsumedEvents().

Also you can use BrowserEvents.MOUSEOVER as a predefined constant.

-- J.

Tom

unread,
Jun 13, 2014, 12:10:05 AM6/13/14
to google-we...@googlegroups.com
Thank you Jens for your hint. I couldn't see any getConsumedEvents() so I used onBrowserEvent and it working ok.

     private class HeaderCell extends AbstractCell<String> {

            private String text;

            public HeaderCell(String text) {
              /*
               * Let the parent class know that our cell responds to click events and
               * keydown events.
               */
              //super("click", "keydown");
                super("mouseover"); 
                this.text=text;

            }

            @Override
            public void onBrowserEvent(Context context, Element parent, String value,
                NativeEvent event, ValueUpdater<String> valueUpdater) {
              // Check that the value is not null.
              if (value == null) {
                return;
              }

              // Call the super handler, which handlers the enter key.
              super.onBrowserEvent(context, parent, value, event, valueUpdater);


              if ("mouseover".equals(event.getType())) {
                  SafeHtmlBuilder sb=new SafeHtmlBuilder();
                    sb.appendHtmlConstant("<b>");


                    sb.appendHtmlConstant("<font color=\"blue\">");
                    sb.appendEscaped(text);
                    sb.appendHtmlConstant("</font></b>");

                    meaningMessagesPopup.setWidget(new HTML(sb.toSafeHtml()));


                    int left = event.getClientX() -140;
                    int top = event.getClientY() +30;
                    meaningMessagesPopup.setPopupPosition(left, top);

                        // Show the popup
                    meaningMessagesPopup.show();
              }
              else if ("mouseout".equals(event.getType())) {
                  meaningMessagesPopup.hide();
              }
            }

            @Override
            public void render(Context context, String value, SafeHtmlBuilder sb) {
              /*
               * Always do a null check on the value. Cell widgets can pass null to
               * cells if the underlying data contains a null, or if the data arrives
               * out of order.
               */
              if (value == null) {
                return;
              }

              sb.appendEscaped(value);
            }


        }

Then

  Header<String> nameColumnHeader = new Header<String>(new HeaderCell("my Text...")) {
                    @Override
                    public String getValue() {
                        return "Name";
                    }
  };
  table.addColumn(nameColumn, nameColumnHeader);
Reply all
Reply to author
Forward
0 new messages