3

我对适应用户屏幕大小的 gridLayout 有问题,我想创建一个 3 列和 2 行的 gridLayout,第一行将包含一个菜单,第二行将是使用面板的主体,第一列X 第二行将包含一棵树,但我无法得到我想要的结果,此代码显示面板但不是全尺寸这是我的代码,我找不到它为什么不起作用!

@Override
public void init() {

    Window main = new Window("My App");
    main.setSizeFull();
    setMainWindow(main);

    VerticalLayout root = new VerticalLayout();
    main.setContent(root);
    main.getContent().setSizeFull();

    GridLayout grid = new GridLayout(3, 2);

    main.addComponent(grid);

    grid.setColumnExpandRatio(0, 0.13f);
    grid.setColumnExpandRatio(1, 0.86f);
    grid.setColumnExpandRatio(2, 0.0f);


    grid.setHeight(100, Sizeable.UNITS_PERCENTAGE);
    grid.setWidth(100,Sizeable.UNITS_PERCENTAGE);


    grid.addComponent(new Label("menu"), 0, 0, 0, 1);
    grid.addComponent(new Label("tree"), 1, 0, 1, 0);

    Panel pan = new Panel();
    pan.setWidth(100, Sizeable.UNITS_PERCENTAGE);
    pan.setHeight(100, Sizeable.UNITS_PERCENTAGE);

    VerticalLayout body = new VerticalLayout();
    body.setSizeFull();

    body.addComponent(pan);

    grid.addComponent(body, 1, 1, 1, 1);

}
4

1 回答 1

7

在详细讨论您的问题之前,我想为您提供一个工具,可以帮助您了解组件在 Vaadin 中的扩展方式:

  • 将“?debug”添加到您用于运行应用程序的地址的末尾(例如 localhost/app/?debug”)
  • 小窗口将出现,顶部有按钮。
  • 按 C 清除,然后按 AL 分析布局
  • 结果将出现一棵组件树。您可以按加号浏览该树
  • 每次按下组件(标签、面板等)时,该组件都会在屏幕上突出显示。

有了这个你可以看到我下面的代码有一个扩展整个屏幕的布局,一个在网格的最后两个单元格上扩展的面板和扩展宽度的标签

调试模式记录在 Vaadin 的书中

我相信组件正在正确扩展,但在错误的位置。在 vaadin 的书中检查 GridLayout 是如何工作的。以下代码更改了您的坐标并添加了一个标签以向您显示面板确实采用了网格的正确单元格。此外,将 VerticalLayout 添加到面板以进行对齐似乎比其他方式更合乎逻辑:

@Override
public void init() {


    Window main = new Window("My App");
    main.setSizeFull();
            setMainWindow(main);

            VerticalLayout root = new VerticalLayout();
    main.setContent(root);
    main.getContent().setSizeFull();

    GridLayout grid = new GridLayout(3, 2);

    main.addComponent(grid);

    grid.setColumnExpandRatio(0, 0.13f);
    grid.setColumnExpandRatio(1, 0.86f);
    grid.setColumnExpandRatio(2, 0.0f);


    grid.setHeight(100, Sizeable.UNITS_PERCENTAGE);
    grid.setWidth(100,Sizeable.UNITS_PERCENTAGE);


            grid.addComponent(new Label("menu"), 0, 0, 2, 0);

            grid.addComponent(new Label("tree"), 0, 1);

            Panel pan = new Panel();
    pan.setWidth(100, Sizeable.UNITS_PERCENTAGE);
    pan.setHeight(100, Sizeable.UNITS_PERCENTAGE);




    VerticalLayout body = new VerticalLayout();
    body.setSizeFull();
    pan.addComponent(body);

    Label bodyLabel= new Label("body panel taking the 2 columns of the last row");
    bodyLabel.setSizeUndefined();


    body.addComponent(bodyLabel);
    body.setComponentAlignment(bodyLabel, Alignment.MIDDLE_CENTER);

    grid.addComponent(pan, 1,1 , 2, 1);

         }
于 2012-06-05T17:53:34.190 回答