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