2012-01-07 127 views
1

我已經在絕對面板中放置了許多小部件,並將絕對面板添加到了RootLayoutPanel。但在瀏覽器調整大小,內容不會調整大小...我錯過了什麼?GWT重新調整瀏覽器窗口大小的組件大小

package panelDemo.client; 

import com.google.gwt.user.client.ui.AbsolutePanel; 

public class AbsolutePanelDemo extends Composite{ 
    public AbsolutePanelDemo() { 

    AbsolutePanel absolutePanel = new AbsolutePanel(); 
    initWidget(absolutePanel); 
    absolutePanel.setSize("1024px", "768px"); 

    TextBox txtbox = new TextBox(); 
    txtbox.setReadOnly(true); 
    txtbox.setText("Enter Something"); 
    absolutePanel.add(txtbox); 

    Label lblIsValid = new Label("Label:"); 
    absolutePanel.add(lblIsValid, 192, 10); 

    CheckBox chckbxIsValid = new CheckBox("label"); 
    absolutePanel.add(chckbxIsValid, 244, 10); 
    chckbxIsValid.setSize("76px", "19px"); 

    Label lblAssignedUser = new Label("Assigned User:"); 
    absolutePanel.add(lblAssignedUser, 362, 13); 

    TextBox user = new TextBox(); 
    user.setReadOnly(true); 
    user.setText("xyz"); 
    absolutePanel.add(user, 457, 1); 

    Button btnClickMeText = new Button("Click Me Text"); 
    absolutePanel.add(btnClickMeText, 646, 1); 
    btnClickMeText.setSize("100px", "28px"); 

    Label lblAlert = new Label("Alert:"); 
    absolutePanel.add(lblAlert, 113, 48); 

    TextBox txtbxAlert = new TextBox(); 
    txtbxAlert.setText("Alert"); 
    absolutePanel.add(txtbxAlert, 161, 36); 
    txtbxAlert.setSize("140px", "16px"); 

    Label lblExpires = new Label("Expires:"); 
    absolutePanel.add(lblExpires, 99, 93); 

    DateBox dateBox = new DateBox(); 
    absolutePanel.add(dateBox, 161, 81); 

    Label lblPriority = new Label("Priority:"); 
    absolutePanel.add(lblPriority, 99, 133); 

    ListBox comboBox = new ListBox(); 
    absolutePanel.add(comboBox, 161, 127); 
    comboBox.setSize("150px", "22px"); 

    Label lblGender = new Label("Gender:"); 
    absolutePanel.add(lblGender, 405, 48); 

    RadioButton rdbtnMale = new RadioButton("new name", "Male"); 
    absolutePanel.add(rdbtnMale, 457, 45); 

    RadioButton rdbtnFemale = new RadioButton("new name", "Female"); 
    absolutePanel.add(rdbtnFemale, 457, 70); 

    Label lblDescription = new Label("Description:"); 
    absolutePanel.add(lblDescription, 386, 114); 

    TextArea txtrThisIsSome = new TextArea(); 
    txtrThisIsSome.setText("This is some description"); 
    absolutePanel.add(txtrThisIsSome, 457, 118); 
    txtrThisIsSome.setSize("149px", "88px"); 

    Label lblContact = new Label("Contact:"); 
    absolutePanel.add(lblContact, 95, 171); 

    IntegerBox integerBox = new IntegerBox(); 
    integerBox.setText("91"); 
    integerBox.setVisibleLength(2); 
    absolutePanel.add(integerBox, 161, 165); 

    IntegerBox integerBox_1 = new IntegerBox(); 
    integerBox_1.setVisibleLength(10); 
    absolutePanel.add(integerBox_1, 203, 165); 

    FileUpload fileUpload = new FileUpload(); 
    fileUpload.setTitle("Upload Something"); 
    absolutePanel.add(fileUpload, 161, 194); 

    Label lblUpload = new Label("Upload:"); 
    absolutePanel.add(lblUpload, 99, 200); 

    Button btnSave = new Button("Save"); 
    absolutePanel.add(btnSave, 290, 255); 
    btnSave.setSize("100px", "28px"); 

    Button btnCancel = new Button("Cancel"); 
    absolutePanel.add(btnCancel, 457, 255); 
    btnCancel.setSize("100px", "28px"); 

    HTMLPanel panel = new HTMLPanel("This is just an example to show that in absolute panel resize wont work. This is evident if you resize your browser window."); 
    absolutePanel.add(panel, 10, 319); 
    } 
} 

我的onModuleLoad功能看起來像這樣

public void onModuleLoad() { 

    RootLayoutPanel.get().add(new AbsolutePanelDemo()); 

} 

回答

4

並非所有的小部件都可以使用RootLayoutPanel(和其他* LayoutPanel的)自動調整大小的東西 - 只有實現RequiresResize的小部件會在父級更改大小時通知他們,並且它們必須更新。

CellBrowserDataGrid是GWT中支持這個的兩個小部件,所有以LayoutPanel結尾的容器都支持它。另外兩個是HeaderPanelResizeComposite。你可以通過實現這個接口來創建你自己的接口,並將這個接口傳遞給另一個可以處理新尺寸的小部件,或者通過爲你需要的行爲構建你自己的調整大小代碼。

0

嘗試設置佈局的面板等的borderlayout

1

您使用的AbsolutePanel的哪些位置上的絕對位置的部件。據我所知,這也意味着除了絕對定位之外(它們在調整面板或瀏覽器的大小時也不會改變它們的位置),它們的維度也是絕對的(所以如果調整瀏覽器的大小,它們的大小也不會改變)。

最簡單的解決問題的方法是使用另一種面板,FlowPanel一個簡單的測試(創造了很多div S)或一些更花哨像CellPanelHorizontalPanelVerticalPanel ...不要過度使用這些面板雖然,他們佔用相當多的瀏覽器資源,因爲他們傾向於創建巨大的html表格;)。

更困難的解決方案是實施Window.addResizeHandler()並自己在AbsolutePanel中完成所有窗口小部件的大小調整。

相關問題