2011-11-20 68 views
2

我有,我想,当用户点击我的UI东西要显示的东西的情况下,当复制SmartGWT的悬停文本的外观/功能(可以是一个网格,标签,等等)。我想是要显示一个小盒子时触发悬停事件有什么证明是相似的。不过,我只想通过点击来展示它,而不是悬停。有没有办法做到这一点,没有很多麻烦?我知道,我总是可以创建一个小的弹出窗口,但悬停文字正是我需要的,智能处理弹出窗口的位置(我认为会利用窗口走好开展更多的工作)。如何做一个点击

回答

4

我不认为有一个简单的方法来做到这一点。下面是我们使用智能弹出类:

public class SmartPopup extends PopupPanel { 

    public void show(int left, int top) { 
     setPopupPositionAndShow(new PositionCallback() { 
      @Override 
      public void setPosition(int offsetWidth, int offsetHeight) { 
       int popupLeft = left; 
       if ((offsetWidth + left > Window.getClientWidth()) 
        && (left - offsetWidth > 0)) { 
        popupLeft = left - offsetWidth; 
       } 

       int popupTop = top; 
       if ((top + offsetHeight > Window.getClientHeight()) 
        && (top - offsetHeight > 0)) { 
        popupTop = top - offsetHeight; 
       } 

       setPopupPosition(popupLeft, popupTop); 
      } 
     }); 
    } 
} 

一旦你有一个这样的类,你可以扩展它让你的工具提示样式,自动包含一个标签,等等...

public class ToolTip extends SmartPopup { 
    public ToolTip(String message) { 
     addStyleName("tool-tip-css"); 
     add(new Label(message)); 
    } 
} 

,然后从那里,你的代码将是相当简单:

yourButtonOrWhatever.addClickHandler(new ClickHandler() { 

     @Override 
     public void onClick(ClickEvent event) { 
      ToolTip toolTip = new ToolTip("Hey, this is like a tool-tip for clicking!"); 
      toolTip.show(event.getClientX(), event.getClientY()); 
     } 
    }); 

我爱写作班这么多,我可能甚至使的ClickHandler一个特殊的子类,所以我没有输入过的那些行第二一遍又一遍......

yourButtonOrWhatever.addClickHandler(new ToolTipHandler("Hey, this is like a tool-tip for clicking!")); 
+0

哇,这是伟大的。非常感谢。 – AHungerArtist

1

为什么不利用这个点击事件处理

 

    onClickTooltip(com.smartgwt.client.widgets.events.ClickEvent event) { 
       int x = event.getX(); 
       int y = event.getY(); 

      final Canvas w = new Canvas();   
      w.setRect(x,y,72,72); 
      w.setContents("I am Here"); 
      w.draw(); 

     }