GWT是否存在一个<;标签>;小装置?

GWT是否存在一个<;标签>;小装置?,gwt,Gwt,我必须向GWT中实现的一小部分AJAX功能添加一个表单。在HTML方面,我想 <label for="personName">Name:</label><input type="text" size="50" id="personName"/> 名称: GWT中的标签小部件似乎只是作为DIV呈现 理想情况下,我希望单击标签文本以聚焦相关的输入。这是内置的浏览器功能,我不想和标签div上的ClickHandler混在一起 有人面对过这个问题吗?是否作为内置小

我必须向GWT中实现的一小部分AJAX功能添加一个表单。在HTML方面,我想

<label for="personName">Name:</label><input type="text" size="50" id="personName"/>
名称:
GWT中的标签小部件似乎只是作为DIV呈现

理想情况下,我希望单击标签文本以聚焦相关的输入。这是内置的浏览器功能,我不想和标签div上的ClickHandler混在一起

有人面对过这个问题吗?是否作为内置小部件存在,但称为其他小部件

编辑:我们得出以下结论。也许有更好的办法

HTML label = new HTML();
label.setHTML("<label for='"+input.getElement().getId()+"'>"+labelText+"</label>");
HTML标签=新建HTML();
label.setHTML(“+labelText+”);

根据大众的需求,我向您展示了InputLabel,一个
+
小部件:)

这是基于类(它包装了一个
元素)-它还没有被彻底测试过-我把它留给读者;)

import com.google.gwt.dom.client.Document;
导入com.google.gwt.dom.client.InputElement;
导入com.google.gwt.dom.client.labelement;
导入com.google.gwt.event.dom.client.ChangeEvent;
导入com.google.gwt.event.dom.client.ChangeHandler;
导入com.google.gwt.event.dom.client.HasChangeHandlers;
导入com.google.gwt.event.logical.shared.ValueChangeEvent;
导入com.google.gwt.event.logical.shared.ValueChangeHandler;
导入com.google.gwt.event.shared.HandlerRegistration;
导入com.google.gwt.user.client.DOM;
导入com.google.gwt.user.client.Element;
导入com.google.gwt.user.client.Event;
导入com.google.gwt.user.client.EventListener;
导入com.google.gwt.user.client.ui.ButtonBase;
导入com.google.gwt.user.client.ui.FormPanel;
导入com.google.gwt.user.client.ui.HasName;
导入com.google.gwt.user.client.ui.HasValue;
导入com.google.gwt.user.client.ui.RadioButton;
导入com.google.gwt.user.client.ui.UIObject;
导入com.google.gwt.user.client.ui.Widget;
公共类InputLabel扩展ButtonBase实现HasName、HasValue和HasChangeHandler{
输入元素输入元素;
LabelElement Labelelelem;
私有布尔值ChangeHandlerInitialized;
/**
*创建没有标签的输入框。
*/
公共输入标签(){
这是(DOM.createInputText());
//setStyleName(“gwt复选框”);//TODO:添加有效的样式名称
}
/**
*创建具有指定文本标签的输入框。
* 
*@param标记复选框的标签
*/
公共输入标签(字符串标签){
这个();
setText(标签);
}
/**
*创建具有指定文本标签的输入框。
* 
*@param标记输入框的标签
*@param asHTML
true
将指定标签视为html */ 公共InputLabel(字符串标签,布尔asHTML){ 这个(); 如果(asHTML){ setHTML(标签); }否则{ setText(标签); } } 受保护的输入标签(元素元素){ super(DOM.createSpan()); inputElem=InputElement.as(elem); labelElem=Document.get().createLabelement(); getElement().appendChild(labelElem); getElement().appendChild(inputElem); 字符串uid=DOM.createUniqueId(); inputElem.setPropertyString(“id”,uid); labelElem.setHtmlFor(uid); //可访问性:默认设置选项卡索引为0,确保元素 //出现在选项卡序列中。FocusWidget的setElement方法已存在 //调用下面覆盖的setTabIndex。但是 //如果进行了此调用,则inputElem尚未创建。因此,我们 //创建inputElem后,再次调用setTabIndex。 设置索引(0); } 公共句柄注册addValueChangeHandler( ValueChangeHandler){ //这是第一个值更改处理程序吗?如果是,是时候添加处理程序了 如果(!valueChangeHandlerInitialized){ addChangeHandler(新的ChangeHandler(){ 更改后的公共作废(更改事件){ ValueChangeEvent.fire(InputLabel.this,getValue()); } }); valueChangeHandlerInitialized=true; } 返回addHandler(handler,ValueChangeEvent.getType()); } /** *返回支持此小部件的输入元素的value属性。 *这是将与InputLabel名称和关联的值 *如果保存它的{@link FormPanel}已提交,则提交到服务器。 * *这可能会返回与{@link#getValue}相同的东西,出于神奇的原因留在这里。 */ 公共字符串getFormValue(){ 返回inputElem.getValue(); } @凌驾 公共字符串getHTML(){ 返回labelElem.getInnerHTML(); } 公共字符串getName(){ 返回inputElem.getName(); } @凌驾 public int getTabIndex(){ 返回inputElem.getTabIndex(); } @凌驾 公共字符串getText(){ 返回labelem.getInnerText(); } /** *获取输入元素的文本值。 * *@返回输入框的值。 *不会返回null */ 公共字符串getValue(){ 如果(isAttached()){ 返回inputElem.getValue(); }否则{ 返回inputElem.getDefaultValue(); } } @凌驾 公共布尔值isEnabled(){ return!inputElem.isDisabled(); } @凌驾 公共无效setAccessKey(字符密钥){ inputElem.setAccessKey(“+”键); } @凌驾 已启用公共void集(已启用布尔值){ inputElem.setDisabled(!enabled); 如果(已启用){ removeStyleDependentName(“已禁用”); }否则{ addStyleDependentName(“已禁用”); } } @凌驾 公共void setFocus(以布尔值为中心){ 如果(聚焦){ inputElem.focus(); }否则{ inputElem.blur(); } } /** *在支持此小部件的输入元素上设置value属性 *将与InputLabel的名称关联并提交到的值 *如果保存它的{@link FormPanel}已提交,则服务器将被删除。 * *不要将其与{@link#setValue}混淆。 * *@param值 */ 公共void setFormValue(字符串值){ 输入。
<label ui:field="myLabel">Some Text</label>
@UiField LabelElement myLabel;
myLabel.setVisible(false);
myLabel.setAttribute("style", "display:none");
<label for="{myTextBox.getElement.getId}">Some field:</label>
<g:TextBox ui:field="myTextBox"/>
...

@UiField(provided=true) TextBox myTextBox = new TextBox();

public MyFormView() {
    myTextBox.getElement().setId(DOM.createUniqueId());
    uiBinder.createAndBindUi(this);
}

...
public class Label extends Widget implements HasText {

public Label() {
  setElement(DOM.createLabel());
}

@Override
public void add(Widget w) {
  super.add(w, getElement());
}

@Override
public String getText() {
  return getElement().getInnerText();
}

@Override
public void setText(String text) {
  getElement().setInnerText((text == null) ? "" : text);
}

public void setFor(String forWho) {
  getElement().setAttribute("for", forWho);
}
xmlns:tmp='urn:import:{REPLACE_WITH_JAVA_PACKAGE_PATH_TO_INPUTLABEL}'

    <tmp:InputLabel for="{fieldRef}">Label text</tmp:InputLabel>
    <g:FlowPanel ui:field="fieldRef">
        <g:TextBox/>
    </g:FlowPanel>
    <g:FlowPanel>
        <g:CheckBox ui:field="fieldRef" />
    </g:FlowPanel>
    <tmp:InputLabel for="{fieldRef}">Label text</tmp:InputLabel>
import com.google.gwt.dom.client.*;
import com.google.gwt.i18n.client.HasDirection;
import com.google.gwt.i18n.shared.DirectionEstimator;
import com.google.gwt.i18n.shared.HasDirectionEstimator;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.DirectionalTextHelper;
import com.google.gwt.user.client.ui.HasDirectionalText;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;

public class InputLabel extends Widget implements HasDirectionalText, HasDirectionEstimator {

    final DirectionalTextHelper directionalTextHelper;
    private boolean init = false;

    public InputLabel() {
        this(Document.get().createLabelElement());
    }

    public InputLabel(Element element) {
        assert (LabelElement.TAG.equalsIgnoreCase(element.getTagName()));

        this.setElement(element);
        this.directionalTextHelper = new DirectionalTextHelper(this.getElement(), true);
    }

    public DirectionEstimator getDirectionEstimator() {
        return this.directionalTextHelper.getDirectionEstimator();
    }

    public void setDirectionEstimator(DirectionEstimator directionEstimator) {
        this.directionalTextHelper.setDirectionEstimator(directionEstimator);
    }

    public void setDirectionEstimator(boolean enabled) {
        this.directionalTextHelper.setDirectionEstimator(enabled);
    }

    private InputElement getInputElement(Widget widget) {
        if (widget.getElement().hasTagName(InputElement.TAG)) return InputElement.as(widget.getElement());
        NodeList<Element> l = widget.getElement().getElementsByTagName(InputElement.TAG);
        if (l.getLength() > 0) {
            return InputElement.as(l.getItem(0));
        }

        return null;
    }

    public void setFor(IsWidget target) {
        if (init) return;
        init = true;
        //

        final InputElement input = getInputElement(target.asWidget());
        if (input != null) {
            if (!input.hasAttribute("id")) input.setId(DOM.createUniqueId());
            getElement().setAttribute("for", input.getId());
        }
    }

    public void setForm(String form) {
        getElement().setAttribute("form", form);
    }

    public String getText() {
        return this.directionalTextHelper.getTextOrHtml(false);
    }

    public void setText(String text) {
        this.directionalTextHelper.setTextOrHtml(text, false);
    }

    public HasDirection.Direction getTextDirection() {
        return this.directionalTextHelper.getTextDirection();
    }

    public void setText(String text, HasDirection.Direction dir) {
        this.directionalTextHelper.setTextOrHtml(text, dir, false);
    }
}