GWT: CellBrowser не отображается в композитном

Пожалуйста, мне нужна твоя помощь. Я создал CellBrowser с UiBinder, который я заполняю из базы данных. Проблема в том, что я не могу отобразить его с помощью метода InitWidget. Но если я прикреплю его непосредственно к RootPanel (используя инструкцию: RootPanel.get(). Add(cellBrowser);), он будет отображен, но поверх других копонентов, которые присоединены к композиту (он станет настоящим беспорядком:/). Я поместил его в HTMLPanel, но он не работает.

Как я могу прикрепить его к композиту и отобразить с другими виджетами? (Я пробовал другие панели, но это не сработало:/).

Вот мой код:

Файл UiBinder:

        <!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" xmlns:c='urn:import:com.google.gwt.user.cellview.client'>
        <ui:style>
        #errors {
            color: red;
        }

        #success {
            color: green;
        }

        .arrondie {
            border: 1px solid black;
            -moz-border-radius: 7px;
            -webkit-border-radius: 7px;
            border-radius: 7px;
            background-color: #FFFFCC;
        }
        </ui:style>
        <g:HorizontalPanel> 

        <g:HTMLPanel>
                <table align="center" id="arrondie">
                    <tr>
                        <td colspan="3" align="center">
                            <div id="errors" align="center"></div>
                            <br />
                            <div id="success" align="center"></div>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <g:Label text="Unit's family:" />
                        </td>
                        <td colspan="2">
                            <g:TextBox width="15em" ui:field="familyName" />
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <g:Label text="Unit:" />
                        </td>
                        <td>
                            <g:TextBox width="15em" ui:field="unitName" />
                        </td>
                        <td>
                            <g:Button ui:field="addUnit" text="Add unit" />
                        </td>
                    </tr>
                    <tr>
                        <td colspan="3" align="center">
                            <g:Button ui:field="submit" text="Submit" />
                        </td>
                    </tr>
                </table>
                </g:HTMLPanel>

                <g:HTMLPanel> 
                    <c:CellBrowser defaultColumnWidth='300' ui:field='cellBrowser' />
                </g:HTMLPanel> 
            </g:HorizontalPanel>
    </ui:UiBinder> 

Вид:

    public class UniteViewImpl extends Composite implements UniteView {

        private Presenter presenter;
        private static UniteViewImplUiBinder uiBinder = GWT.create(UniteViewImplUiBinder.class);
        private ListDataProvider<FamilleUniteProxy> dataProvider;

        interface UniteViewImplUiBinder extends UiBinder<Widget, UniteViewImpl> {
        }

        @SuppressWarnings("deprecation")
        public UniteViewImpl() {
            dataProvider = new ListDataProvider<FamilleUniteProxy>(
                    new ArrayList<FamilleUniteProxy>());
            TreeViewModel model = new CustomTreeModel(dataProvider);
            cellBrowser = new CellBrowser(model, null);
            cellBrowser.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED);
            cellBrowser.setHeight("200");
            cellBrowser.setWidth("630");
            RootPanel.get().add(cellBrowser); // If I delete this line, the cellBrowser is not displayed
            initWidget(uiBinder.createAndBindUi(this));
        }


        @UiField
        TextBox familyName;

        @UiField
        TextBox unitName;

        @UiField
        Button addUnit;

        @UiField
        Button submit;

        @UiField(provided = true)
        CellBrowser cellBrowser;

        public UniteViewImpl(String firstName) {
            initWidget(uiBinder.createAndBindUi(this));
        }

        @Override
        public void setPresenter(Presenter presenter) {
            this.presenter = presenter;
        }

        public void updateProvider(List<FamilleUniteProxy> familles) {
            dataProvider.setList(familles);
            dataProvider.refresh();
        }

        @UiFactory
        public CellBrowser getCellBrowser() {
            return cellBrowser;
        }
    }

Класс TreeViewModel:

    class CustomTreeModel implements TreeViewModel {

        private ListDataProvider<FamilleUniteProxy> dataProvider ;

        public CustomTreeModel(ListDataProvider<FamilleUniteProxy> dataProvider) {
            this.dataProvider = dataProvider;
        }

        public <T> NodeInfo<?> getNodeInfo(T value) {
            if (value == null) {
                Cell<FamilleUniteProxy> cell = new AbstractCell<FamilleUniteProxy>() {
                    @Override
                    public void render(Context context, FamilleUniteProxy value,
                            SafeHtmlBuilder sb) {
                        sb.appendEscaped(value.getIntituleFamilleUnite());
                    }
                };

                return new DefaultNodeInfo<FamilleUniteProxy>(dataProvider, cell);

            } else if (value instanceof FamilleUniteProxy) {
                ListDataProvider<UniteProxy> dataProvider = new ListDataProvider<UniteProxy>(
                        ((FamilleUniteProxy) value).getUnites());
                Cell<UniteProxy> cell = new AbstractCell<UniteProxy>() {
                    @Override
                    public void render(Context context, UniteProxy value,
                            SafeHtmlBuilder sb) {
                        if (value != null) {
                            sb.appendEscaped(value.getIntituleUnite());
                        }
                    }
                };
                return new DefaultNodeInfo<UniteProxy>(dataProvider, cell);
            }
            return null;
        }

        public boolean isLeaf(Object value) {
            if (value instanceof UniteProxy) {
                return true;
            }
            return false;
        }
    }

Надеюсь, это понятно и большое спасибо.

1 ответ

Ну, я нашел ответ. Это были ширина и высота, которые должны быть в пикселях (200 пикселей и 630 пикселей). Надеюсь, это поможет кому-то:)

Другие вопросы по тегам