GWT Popup и UIBinder: панель или диалоговое окно? - PullRequest
3 голосов
/ 02 августа 2011

У меня есть требование, когда при нажатии кнопки пользователю необходимо ввести всплывающее окно / диалоговое окно для ввода некоторых дополнительных сведений, таких как фамилия, DOB и т. Д. Я пытался поиграть с window.confirm(), но ядумаю, что это не служит моей цели.Может ли кто-нибудь помочь мне, как это может быть достигнуто в GWT через UIBinder?

Я попробовал кое-что подобное в моем пользовательском интерфейсе binder.xml

<g:HTMLPanel visible="false" >
                                    <g:DialogBox ui:field="dialogPanel"
                                        animationEnabled="true" modal="false" glassEnabled="false">
                                        <g:caption>More Details</g:caption>
                                        <table>
                                            <tr>
                                                <td colspan="2" align="center">
                                                    <g:Datepicker ui:field="DOB">DOB:</g:Datepicker>
                                                </td>
                                            </tr>

                                            <tr>
                                                <td>UserName:</td>
                                                <td>
                                                    <g:TextBox ui:field="usernameTextBox" />
                                                </td>
                                            </tr>
                                            <tr>
                                                <td></td>
                                                <td align="right">
                                                    <g:Button ui:field="loginButton">OK</g:Button>
                                                </td>
                                            </tr>
                                        </table>
                                    </g:DialogBox>
                                </g:HTMLPanel>

Я не уверен, с кем идти: всплывающее окно или диалоговое окно!

Спасибо.

Ответы [ 2 ]

10 голосов
/ 23 июля 2012

Вот скелет для диалогового окна GWT, использующего uibinder:

MyDialogBox.java

import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.Widget;

public class MyDialogBox extends DialogBox {
    private static final Binder binder = GWT.create(Binder.class);
    interface Binder extends UiBinder<Widget, MyDialogBox> {
    }
    public MyDialogBox() {
        setWidget(binder.createAndBindUi(this));
        setAutoHideEnabled(true);
        setText("My Title");
        setGlassEnabled(true);
         center();
    } 
}

MyDialog.ui.xml

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
    xmlns:g='urn:import:com.google.gwt.user.client.ui'>
    <ui:style>
        .panel {
            background-color: ivory;
        }
    </ui:style>
    <g:FlowPanel styleName="{style.panel}">
    <g:Label>Dialog Content</g:Label>
    </g:FlowPanel>
    </ui:UiBinder>

показать его с помощью:

MyDialogBox m = new MyDialogBox();
m.show();
0 голосов
/ 02 августа 2011

DialogBox является потомком PopupPanel и обладает всеми его функциями. Дополнительно оно имеет (из документов):

..caption area at the top and can be dragged by the user.

Об использовании в UiBinder (снова из документов):

DialogBox elements in UiBinder templates can have one widget child and one 
<g:caption> child.

Так что, похоже, вам нужно заменить <table> виджетом GWT, скорее всего, <g:HTMLPanel> и поместить в него целое <table>.

Кроме того, PopupPanel и DialogBox являются автономными виджетами и обычно не добавляются в другие виджеты, а отображаются с помощью методов .show() и hide(). Итак, в вашем UiBinder вы можете положить <g:DialogBox> на корневом уровне.

...