1

我想在 onBlur 事件上使用 java 代码更改 ag:label 的颜色。我正在使用 Eclipse,UIBinder。

这就是我的想法,虽然它不起作用。

在我的 StandardDocumentDownload.ui.xml 文件中

<ui:style>     
   .testStyle {
   }
   .styleRequiredData
   {
        color:red;

    }
 </ui:style>

这是我的 standardDocumentDownload.java 文件中的事件

@UiHandler("comboTitle")
void onComboTitleBlur(BlurEvent event) {
    int title = comboTitle.getSelectedIndex();

    if(title == 0)
    {
        labTitleReq.setText("Please enter a value");
        labTitle.addStyleName("styleRequiredData");
    }
    else
    {
        labTitleReq.setText("");
    }

}

如何在事件触发时将红色添加到标签的现有样式中。

亲切的问候

4

2 回答 2

12

请参阅此处以编程方式访问内联样式

对你来说,它应该是这样的:

<ui:style type="com.yourapp.YourClass.MyStyle">     
    .testStyle {
    }
    .styleRequiredData
    {
        color:red;
    }
</ui:style>

public class YourClass extends Widget {
    interface MyStyle extends CssResource {
        String testStyle();
        String styleRequiredData();
    }

    @UiField MyStyle style;

    /* ... */

    @UiHandler("comboTitle")
    void onComboTitleBlur(BlurEvent event) {
        int title = comboTitle.getSelectedIndex();
        if(title == 0){
            labTitleReq.setText("Please enter a value");
            labTitle.getElement().addClassName(style.styleRequiredData);
        } else {
            labTitleReq.setText("");
        }
    }
}
于 2012-06-05T11:57:56.063 回答
3

我花了一段时间才找到它,但文档;“使用 UiBinder 进行声明式布局:以编程方式访问内联样式”告诉您如何操作。这里的代码片段

绑定器:

  <ui:style type='com.my.app.MyFoo.MyStyle'>
    .redBox { background-color:pink; border: 1px solid red; }
    .enabled { color:black; }
    .disabled { color:gray; }
  </ui:style>

  <div class='{style.redBox} {style.enabled}'>I'm a red box widget.</div>

</ui:UiBinder>

后面的代码:

public class MyFoo extends Widget {
  interface MyStyle extends CssResource {
    String enabled();
    String disabled();
  }

  @UiField MyStyle style;

  /* ... */

  void setEnabled(boolean enabled) {
    getElement().addClassName(enabled ? style.enabled() : style.disabled());
    getElement().removeClassName(enabled ? style.disabled() : style.enabled());
  }
}

描述:

该元素有一个新属性 type='com.my.app.MyFoo.MyStyle'。这意味着它需要实现该接口(在上面的 MyFoo 小部件的 Java 源代码中定义)并提供它调用的两个 CSS 类,启用和禁用。

现在看看@UiField MyStyle 样式;MyFoo.java 中的字段。这使代码可以访问为块生成的 CssResource。setEnabled 方法使用该字段在打开和关闭小部件时应用启用和禁用的样式。

您可以在具有指定类型的样式块中自由定义任意数量的其他类,但您的代码将只能访问接口所需的那些。

于 2012-06-05T11:58:35.417 回答