2010-10-06 44 views
0

我使用Ext-GWT在小部件上設置了邊界佈局。有沒有辦法可以自動設置「分割」位置?原因是,如果用戶調整頁面上的控件(不一定是分割控件所在的父控件),我想將分割值設置爲特定的百分比值(如30%)。如何才能做到這一點?如何以編程方式在GXT中設置BorderLayout的分割位置?

這裏的現有代碼:

import com.extjs.gxt.ui.client.Style.LayoutRegion; 
import com.extjs.gxt.ui.client.util.Margins; 
import com.extjs.gxt.ui.client.widget.ContentPanel; 
import com.extjs.gxt.ui.client.widget.LayoutContainer; 
import com.extjs.gxt.ui.client.widget.layout.BorderLayout; 
import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData; 
import com.google.gwt.user.client.Element; 

public class BorderLayoutExample extends LayoutContainer { 

    setSplitPositionTo(float percentage) { 
    // TODO: How to do this? 
    } 

    protected void onRender(Element target, int index) { 
    super.onRender(target, index); 
    final BorderLayout layout = new BorderLayout(); 
    setLayout(layout); 
    setStyleAttribute("padding", "10px"); 

    ContentPanel west = new ContentPanel(); 
    ContentPanel center = new ContentPanel(); 

    //uncomment this section if you dont want to see headers 
    /* 
    * west.setHeaderVisible(false); 
    * center.setHeaderVisible(false); 
    */ 

    BorderLayoutData westData = new BorderLayoutData(LayoutRegion.WEST, 150); 
    westData.setSplit(true); 
    westData.setCollapsible(true); 
    westData.setMargins(new Margins(0,5,0,0)); 

    BorderLayoutData centerData = new BorderLayoutData(LayoutRegion.CENTER); 
    centerData.setMargins(new Margins(0)); 

    add(west, westData); 
    add(center, centerData); 
    } 
} 

回答

1

這一次是相當棘手的

您需要可以訪問到非中心layoutdata和Widget的邊框佈局。 (由於中心是通過剩餘空間計算的)。 然後使它們可用於setSplitPositionTo方法。

在我的例子中,我讓他們成爲班上的成員。 最後我的方法如下所示,並調用像myBorderLayoutInstance.setPlitPositionTo(0.4f); 使用您提供的示例和此修正作爲一種魅力。

BorderLayoutData westData; 
ContentPanel west; 

void setSplitPositionTo(float percentage) { 
    westData.setSize(percentage); 
    Component c = west; 
    Map<String, Object> state = c.getState(); 
    state.put("size", westData.getSize()); 
    c.saveState(); 
    layout(true); 
} 
相關問題