On Feb 9, 12:00 pm, Ovidiu Gheorghies <[email protected]> wrote:
> Hello,
>
> The DialogBox API (http://google-web-toolkit.googlecode.com/svn/
> javadoc/2.0/com/google/gwt/user/client/ui/DialogBox.html) notes that a
> DialogBox can be defined as a UIBinder template as follows:
>
>  <g:DialogBox autoHide="true" modal="true">
>    <g:caption><b>Caption text</b></g:caption>
>    <g:HTMLPanel>
>      Body text
>      <g:Button ui:field='cancelButton'>Cancel</g:Button>
>      <g:Button ui:field='okButton'>Okay</g:Button>
>    </g:HTMLPanel>
>  </g:DialogBox>
>
> What is the proper way of using this definition from Java code?
> Supposing that the above definition is contained in
> NotificationWindow.ui.xml, the following naive approach to
> NotificationWindow.java does not work:
>
> public class NotificationWindow extends Composite {
>         private static NotificationWindowUiBinder uiBinder =
> GWT.create(NotificationWindowUiBinder.class);
>         interface NotificationWindowUiBinder extends UiBinder<Widget,
> NotificationWindow> {}
>
>         @UiField DialogBox dialogBox;
>
>         public NotificationWindow() {
>                 initWidget(uiBinder.createAndBindUi(this));
>         }
>
>         public void show() {
>             dialogBox.show();
>     }
>
> }
>
> If the EntryPoint-derived class calls:
>
> (new NotificationWindow()).show();
>
> then the following exception is logged:
>
> java.lang.IllegalStateException: This widget's parent does not
> implement HasWidgets
>
> How is the <g:DialogBox> definition from the DialogBox API used
> correctly from Java code?

There are two possibilities: inheriting DialogBox or having a
DialogBox field (but then not inheriting a Widget).

Solution #1: inheriting a DialogBox

class NotificationWindow extends DialogBox {
   ...

   public NotificationWindow() {
     // we don't care about the returned value, it'll be 'this'
     uiBinder.createAndBindUi(this);
   }

   @UiFactory
   DialogBox thatsJustMe() {
      // UiBinder will call this to get a DialogBox instance
      // and this is the DialogBox instance we want to use
      return this;
   }

   ...
}


Solution #2: not inheriting DialogBox

// Note: do NOT inherit Composite, Widget or UIObject!
class NotificationWindow {
   ...

   private DialogBox dialogBox;

   public NotificationWindow() {
      dialogBox = uiBinder.createAndBind(this);
   }

   public void show() {
      dialogBox.show();
   }

   ...
}

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to