Java GWT从uiBinder恢复可见性限制

Java GWT从uiBinder恢复可见性限制,java,gwt,visibility,restore,restrictions,Java,Gwt,Visibility,Restore,Restrictions,假设我在ui.xml文件中有一些具有visible=“false”属性的组件,我在java代码中展示了其中的一些组件。是否有任何简单的方式/方法来恢复uiBinder中存储的可见性限制,以便获得基本组件配置 不,UiBinder不是那样工作的。ui.xml文件在编译时用于为您生成Java代码。因此,您的visible=“false”可能会导致生成对UiObject.setVisible等的调用。此代码在您调用initWidget(uiBinder.createAndBindUi(This))时运

假设我在ui.xml文件中有一些具有
visible=“false”
属性的组件,我在java代码中展示了其中的一些组件。是否有任何简单的方式/方法来恢复uiBinder中存储的可见性限制,以便获得基本组件配置

不,UiBinder不是那样工作的。
ui.xml
文件在编译时用于为您生成Java代码。因此,您的
visible=“false”
可能会导致生成对
UiObject.setVisible
等的调用。此代码在您调用
initWidget(uiBinder.createAndBindUi(This))时运行。如果你想将你的小部件“还原”到UiBinder设置的初始状态,恐怕唯一简单的方法就是再次实例化小部件——但我不建议这样做,因为这通常是一个代价高昂的操作。最好只编写一个将字段恢复到预定义状态的方法——您也可以使用此方法设置初始状态,而不是在UiBinder模板中定义它(从某种意义上说是复制)。我假设您的类中有所有可访问的必要字段(因为您在问题中提到通过Java代码更改它们的可见性),因此您不必添加一堆字段来调用
setVisibile

您只需调用setVisibile(true)到您想要的小部件:

菲希尔·尤宾德

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
    xmlns:g='urn:import:com.google.gwt.user.client.ui'>

  <g:HTMLPanel>
    Hello, <g:TextBox ui:field='textBox' visible='false'/>.
  </g:HTMLPanel>

</ui:UiBinder>

你好
菲希尔爪哇

public class HelloWidgetWorld extends Composite {

  interface MyUiBinder extends UiBinder<Widget, HelloWidgetWorld> {}
  private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);

  @UiField TextBox textBox;

  public HelloWidgetWorld() {
    // sets listBox
    initWidget(uiBinder.createAndBindUi(this));
  }

  public void restoreVisible() {
     textBox.setVisible(true);
  }
}
公共类HelloWidgetWorld扩展了复合{
接口MyUiBinder扩展了UiBinder{}
私有静态MyUiBinder=GWT.create(MyUiBinder.class);
@UiField文本框文本框;
公共HelloWidgetWorld(){
//设置列表框
initWidget(uiBinder.createAndBindUi(this));
}
可恢复的公共无效(){
textBox.setVisible(true);
}
}

这很明显,但并不优雅。我需要一个解决方案,它可以在不检查ui.xml文件的情况下完成工作。但无论如何还是要谢谢你,或者我不明白你想做什么。经过再三考虑,我决定在单独的结构中保留可见性限制,这样我就可以在任何需要的时候轻松地进行设置。不过还是谢谢你的回答!没问题:)如果你发现你的问题/问题有一个有趣的解决方案,也许值得在这里分享作为一个答案(你甚至可以将它设置为已接受,因为它是你问题的答案),这样其他人可能会从中受益?