2012-06-21 59 views
0

我是SmartGWT的新手,並且長時間無法解決此問題。當最大化/恢復窗口或拖動調整大小欄時圖表無法正確顯示(SmartGWT)

在我最大化/恢復窗口後,圖表不在正確的位置並且沒有調整大小,當我在窗口中拖動調整大小欄時,存在同樣的問題。但是,當我拖動窗口的邊緣,即使只是一點點,圖表也可以正確渲染。 (看起來像有一個延遲或什麼)

我希望我的圖表可以立即正確渲染窗口最大化/恢復,或當我拖動調整大小欄。不要試圖每次都拖動窗口邊緣來糾正它。

請看看下面的簡單情況:(我用的圖表HighCharts)

import org.moxieapps.gwt.highcharts.client.Chart; 
import org.moxieapps.gwt.highcharts.client.Point; 
import org.moxieapps.gwt.highcharts.client.Series; 
import org.moxieapps.gwt.highcharts.client.ToolTip; 
import org.moxieapps.gwt.highcharts.client.ToolTipData; 
import org.moxieapps.gwt.highcharts.client.ToolTipFormatter; 
import org.moxieapps.gwt.highcharts.client.labels.PieDataLabels; 
import org.moxieapps.gwt.highcharts.client.plotOptions.PiePlotOptions; 
import org.moxieapps.gwt.highcharts.client.plotOptions.PlotOptions; 

import com.google.gwt.core.client.EntryPoint; 
import com.google.gwt.user.client.Window; 
import com.google.gwt.user.client.ui.RootPanel; 
import com.smartgwt.client.widgets.layout.HLayout; 
import com.smartgwt.client.widgets.layout.VLayout; 

public class Test1 implements EntryPoint { 

    public void onModuleLoad() { 

     Window.enableScrolling(true); 
     Window.setMargin("0px"); 

     HLayout mainLayout = new HLayout(); 
     mainLayout.setWidth100(); 
     mainLayout.setHeight100(); 

     VLayout vl1 = new VLayout(); 
     vl1.setWidth(250); 
     vl1.setHeight100(); 
     vl1.setShowResizeBar(true); 

     VLayout vl2 = new VLayout(); 

     vl2.setWidth100(); 
     vl2.setHeight100(); 

     HLayout top = new HLayout(); 
     HLayout bottom = new HLayout(); 
     VLayout topLeft = new VLayout(); 
     VLayout topRight = new VLayout(); 
     VLayout bottomLeft = new VLayout(); 
     VLayout bottomRight = new VLayout(); 

     topLeft.addMember(drawCharts()); 
     topRight.addMember(drawCharts()); 
     bottomLeft.addMember(drawCharts()); 
     bottomRight.addMember(drawCharts()); 

     top.setMembers(topLeft, topRight); 
     bottom.setMembers(bottomLeft, bottomRight); 

     vl2.setMembers(top, bottom); 

     mainLayout.setMembers(vl1, vl2); 

     RootPanel.get().add(mainLayout); 
    } 

    private Chart drawCharts() { 

     final Chart chart = new Chart() 
       .setType(Series.Type.PIE) 
       .setPlotBackgroundColor((String) null) 
       .setPlotBorderWidth(null) 
       .setPlotShadow(false) 
       .setOption("/chart/marginTop", 0) 
       .setOption("/chart/marginBottom", 10) 
       .setPiePlotOptions(
         new PiePlotOptions() 
           .setAllowPointSelect(true) 
           .setCursor(PlotOptions.Cursor.POINTER) 
           .setPieDataLabels(
             new PieDataLabels().setEnabled(false)) 
           .setShowInLegend(true)) 
       .setToolTip(new ToolTip().setFormatter(new ToolTipFormatter() { 
        public String format(ToolTipData toolTipData) { 
         return "<b>" + toolTipData.getPointName() + "</b>: " 
           + toolTipData.getYAsDouble() + " %"; 
        } 
       })); 
     chart.addSeries(chart 
       .createSeries() 
       .setName("Browser share") 
       .setPoints(
         new Point[] { 
           new Point("Firefox", 45.0), 
           new Point("IE", 26.8), 
           new Point("Chrome", 12.8).setSliced(true) 
             .setSelected(true), 
           new Point("Safari", 8.5), 
           new Point("Opera", 6.2), 
           new Point("Others", 0.7) })); 

     return chart; 
    } 
} 

我是否需要添加一個調整大小處理程序來解決這個問題?

或者它可能是圖表佈局的問題?我將該區域分爲四部分(top_left,top_right,bottom_left,bottom_right),並將圖表分成每個部分。

任何人都知道如何解決這個困擾我很長一段時間的問題?讚賞。

回答

1

首先,我相信你的瀏覽器共享不是很準確(Lol)。

快速瀏覽一下你的代碼,你似乎將GWT圖表與SmartGWT混合在一起,而SmartGWT並沒有完全支持。

您將不得不在這裏添加一些手動處理調整大小事件。

在這篇文章請看:

http://forums.smartclient.com/showthread.php?t=8159#aContainer

和簡要說明就在這裏:

http://forums.smartclient.com/showthread.php?t=8159#aMix

+0

啊,我明白了。感謝您的評論,這非常有用。我使用的圖表庫確實是第三方GWT小部件。我認爲SmartGWT也有自己的圖表小部件稱爲FacetCharts,是免費使用?謝謝。 – sozhen

+1

@SongtaoZ圖表不屬於LGPL版本。你必須至少有專業版才能訪問HTML5圖表 –

+0

啊,我明白了。我將使用HighCharts。感謝您的信息! – sozhen

相關問題