你如何获得一个gwt标签来填充网格单元格?

时间:2011-06-01 15:54:32

标签: gwt

我有一个gwt标签,我将它放入gwt网格。我在标签上有一些活动。所以我需要标签来填满整个网格单元格...否则鼠标悬停事件将不会触发。

目前我正在标签上执行setWidth(“100%)和setHeight(”100%)。这使标签水平填充......但我无法获得填充网格单元格的高度。 如何让标签填满整个网格单元格(horz和vert)?是不是有某种CSS属性我可以改为100%?


我得到的最远的是将标签包裹在网格中。然后将网格/标签嵌入网格单元格中。然后标签看起来占据了整个网格。但事件仍然只适用于标签。

2 个答案:

答案 0 :(得分:1)

要在单元格上捕获事件,您可以使用在网格上设置clickhandler并检查事件中传递的单元格是否是您需要处理的标签单元格。通过这种方式,您当然可以为整个单元格内容触发事件。

单元格未填充100%的原因很可能是因为表格(默认情况下)设置了单元格间距,这限制了您获得100%的宽度/高度。您可以将cellspacing设置为0,但这意味着它适用于表中的所有单元格,这意味着您的布局可能会以不希望的方式发生变化,因此在表格上使用clickhandler是一种更好的解决方案。

答案 1 :(得分:-1)

我创建了一个自定义的“FillLabel”类。然后将CSS样式属性width / height设置为100%。这个自定义FillLabel类似乎满足了要求... 虽然我觉得有一个更优雅的解决方案,我欢迎任何其他人

我扩展了Grid并添加了各种鼠标事件接口:

import com.google.gwt.event.dom.client.*
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.Label;
public class FillLabel 
       extends Grid
       implements HasMouseOutHandlers, 
                  HasMouseOverHandlers,
                  HasMouseMoveHandlers
{

    private Label label;

    /** Use this constructor if you are creating a root for a new tree. */
    public FillLabel(String name) {
        super(1,1);
        this.label = new Label(name);
        this.setWidget(0, 0, this.label);
    }

    /***************************************************************************
     * Mouse Over Events
     ***************************************************************************/
    @Override
    public HandlerRegistration addMouseOverHandler(MouseOverHandler handler) {
        return this.addDomHandler(handler, MouseOverEvent.getType());
    }

    /***************************************************************************
     * Mouse Out Events
     ***************************************************************************/
    @Override
    public HandlerRegistration addMouseOutHandler(MouseOutHandler handler) {
        return this.addDomHandler(handler, MouseOutEvent.getType());
    }

    /***************************************************************************
     * Mouse Move Events
     ***************************************************************************/
    @Override
    public HandlerRegistration addMouseMoveHandler(MouseMoveHandler handler) {
        return this.addDomHandler(handler, MouseMoveEvent.getType());
    }

}
相关问题