有没有办法更改已检查/未选中的MCheckBox状态的文本?

时间:2012-09-24 19:48:21

标签: mgwt

如何将默认MCheckBox状态文本(当前为I / 0)更改为例如YES / NO或ON / OFF?

3 个答案:

答案 0 :(得分:3)

先生。 Daniel Kurka是MGWT中所有小部件类的作者。如果看起来&感觉不是 满足我们的要求,我们可以根据我们的要求编辑这些类并重写它们。因为它们是开源的。我在很多类上完成了这个,比如CellList,FormListEntry和MCheckBox。代码为ON / OFF而不是I / O

public MyOwnCheckBox(CheckBoxCss css) {
    this.css = css;
    css.ensureInjected();
    setElement(DOM.createDiv());
    addStyleName(css.checkBox());

    onDiv = DOM.createDiv();
    onDiv.setClassName(css.on());
    onDiv.setInnerText("ON");
    getElement().appendChild(onDiv);

    middleDiv = DOM.createDiv();
    middleDiv.setClassName(css.middle());
    Element middleContent = DOM.createDiv();
    middleContent.setClassName(css.content());
    middleDiv.appendChild(middleContent);
    getElement().appendChild(middleDiv);

    offDiv = DOM.createDiv();
    offDiv.setClassName(css.off());
    offDiv.setInnerText("OFF");
    getElement().appendChild(offDiv);

    addTouchHandler(new TouchHandlerImplementation());

    setValue(true, false);

}

编写一个像MyOwnCheckBox.just这样的新类,将代码复制到MCheckBox中并粘贴到类MyOwnCheckBox中,在代码中找到并替换MCheckBox和MyOwnCheckBox(更改构造函数的名称)。做以下更改。

onDiv.setInnerText("ON");

offDiv.setInnerText("OFF");

最后创建对象到MyOwnCheckBox而不是MCheckBox,它会显示MCheckBox的ON / OFF。

答案 1 :(得分:1)

现在没有办法做到这一点,但没有真正的原因,复选框没有实现HasText,除了我们可能需要更新css,以便大文本不会破坏布局。

如果您认为mgwt应该实现此问题并投票支持此问题:http://code.google.com/p/mgwt/issues/detail?id=171

答案 2 :(得分:1)

嗯,一个简单的方法来完成同样的事情,而不创建一个模仿MCheckBox的新类,就是做类似下面代码的事情:

CheckBoxCss css = MGWTStyle.getTheme().getMGWTClientBundle().getCheckBoxCss();
String offClass = css.off();
String onClass = css.on();
NodeList<Node> checkBoxElems;

mIsSingleSkuBox = new MCheckBox(css);

checkBoxElems = mIsSingleSkuBox.getElement().getChildNodes();
for( int i = 0; i < checkBoxElems.getLength(); i++ )
{
    Element openElem = (Element) checkBoxElems.getItem(i);
    String className = openElem.getClassName();

    if( className.equals( offClass))
    {
        openElem.setInnerText("No" );
    }
    else if( className.equals( onClass))
    {
        openElem.setInnerText("Yes" );
    }
}

任何超过3个字符的内容都可能存在空间问题,但它与&#34;是&#34;和&#34;不&#34;对我来说。