【问题标题】:GWT: UI doesn't load until window is resizedGWT:在调整窗口大小之前不会加载 UI
【发布时间】:2014-09-03 22:58:33
【问题描述】:

我知道 GWT 不再支持 quirks 模式。因此,不鼓励开发人员使用 RootPanel、DockPanel 等。在使用 RootLayoutPanel 和 DockLayoutPanel 实现我的应用程序时,我发现 UI 在调整浏览器窗口大小之前不会加载。

明确地说,我在开发模式下运行我的应用程序并刷新我的浏览器(谷歌浏览器)。尽管根据我的 Eclipse 控制台,一切似乎都已正常加载,但我的浏览器中什么也没有出现。调整浏览器窗口大小后,我的所有内容都可以正常加载。

虽然我在 DockLayoutPanel 中插入了一个 MapWidget,但似乎 MapWidget 并不是罪魁祸首,因为删除“panel.add(mapWidget)”行仍然有相同的结果。我可能会错过什么?

下面是我的主要课程的代码。为简洁起见,省略了 HTML 代码。在我的实际代码中,我只在其中放置了文本和样式。

public class MyApp implements EntryPoint {

    private MapWidget mapWidget;

    public void onModuleLoad() {
        loadMapWidget();
    }

    private void loadMapWidget() {

        // Does device have location tracking?
        boolean sensor = false;

        // Load proper map libraries
        ArrayList<LoadLibrary> loadLibraries = new ArrayList<LoadApi.LoadLibrary>();

        // Configure runnable
        Runnable onLoad = new Runnable() {

            @Override
            public void run() {
                // Center on Vancouver
                LatLng center = LatLng.newInstance(49.261226, -123.1139268);

                // Configure Map Widget options
                MapOptions mapOptions = MapOptions.newInstance();
                mapOptions.setMapTypeId(MapTypeId.ROADMAP);
                mapOptions.setCenter(center);
                mapOptions.setZoom(14);

                // Instantiate and configure Map Widget
                mapWidget = new MapWidget(mapOptions);

                // Configure Marker options
                MarkerOptions markerOptions = MarkerOptions.newInstance();
                markerOptions.setPosition(LatLng.newInstance(49.261226, -123.1139268));

                // Create Marker
                final Marker marker = Marker.newInstance(markerOptions);
                marker.setMap(mapWidget);

                plotMapWidgetOntoPanel();
            }

        };

        LoadApi.go(onLoad, loadLibraries, sensor);
    }

    private void plotMapWidgetOntoPanel() {
        DockLayoutPanel panel = new DockLayoutPanel(Unit.EM);
        panel.addEast(new HTML("..."), 20);
        panel.addNorth(new HTML("..."), 1.5);
        panel.addSouth(new HTML("..."), .5);
        panel.add(mapWidget);
        mapWidget.triggerResize();
        RootLayoutPanel.get().add(panel);
    }
}

【问题讨论】:

  • 你在RootLayoutPanel.get().add(panel) 声明之后尝试过panel.forceLayout 吗?我发现这在某些情况下有效。
  • 我刚试了下,问题依旧。

标签: java eclipse gwt user-interface google-maps-api-3


【解决方案1】:

为了使用 gwt MapWidget,你必须绝对设置它的大小

例如:mapwidget.setSize("600px","600px")

如果你想动态设置它的大小,你必须以这种方式根据它的父部件大小来设置它的大小:

mapwidget.setSize(mapwidget.getParent().getElement().getStyle().getWidth(),
                    mapwidget.getParent().getElement().getStyle().getHeight()); 

我希望这个解决方案对您有所帮助;

【讨论】:

  • 不幸的是没有运气。就像我说的,看起来 MapWidget 不是罪魁祸首。无论是否给 MapWidget 一个静态大小,页面都需要调整大小才能加载。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
  • 2017-01-18
  • 2016-11-27
  • 1970-01-01
  • 2015-06-22
相关资源
最近更新 更多