Изменение размеров компонентов GWT при изменении размера окна браузера - PullRequest
1 голос
/ 07 января 2012

Я поместил много виджетов в абсолютную панель и добавил абсолютную панель в RootLayoutPanel.Но при изменении размера браузера содержимое не изменяется ... я что-то упустил ???

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());

}

Ответы [ 3 ]

4 голосов
/ 08 января 2012

Не все виджеты могут использовать материал автоматического изменения размера RootLayoutPanel (и других * LayoutPanel) - только виджеты, которые реализуют RequiresResize, будут уведомлены, когда их родитель изменил размер, и они должны обновить.

CellBrowser и DataGrid - это два виджета в GWT, которые поддерживают это, все контейнеры, оканчивающиеся на LayoutPanel, также поддерживают его. Два других - HeaderPanel и ResizeComposite. Вы можете создать свой собственный, реализовав интерфейс и передавая вызов другому виджету, который может обрабатывать новый размер, или создав собственный код изменения размера для нужного вам поведения.

1 голос
/ 08 января 2012

Вы используете AbsolutePanel, который позиционирует свои виджеты на абсолютной позиции. Насколько я знаю, это также означает, что помимо абсолютного позиционирования (они также не изменят свое положение при изменении размера панели или браузера), их размер также будет абсолютным (поэтому их размер также не изменится, если вы измените размер браузера. ).

Самым простым решением проблемы было бы использование другой панели, FlowPanel для простого теста (создает много div с) или чего-то более причудливого типа CellPanel, HorizontalPanel, VerticalPanel. .. Не злоупотребляйте этими панелями, хотя они занимают довольно много ресурсов браузера, поскольку имеют тенденцию создавать огромные таблицы HTML;

Более сложное решение - внедрить Window.addResizeHandler() и выполнить все изменения размера виджетов в вашей AbsolutePanel.

0 голосов
/ 08 января 2012

Попробуйте установить макет для вашей панели, например BorderLAyout

...