Simple ViewFrame Example

ViewFrame simplifies the process of creating views with a header, scrollable content and footer. Please note that ViewFrame does not set any margin, padding or spacing by default. It simply provides the structure.

The three main methods of ViewFrame are:

  • setViewHeader(Component…​ components)

  • setViewContent(Component…​ components)

  • setViewFooter(Component…​ components)

These slots can contain any component and any number of components. The content slot will take up any available vertical space and scroll automatically upon overflow.

Example

A simple example view using default Vaadin components. For more advanced examples see the views located in the com.vaadin.starter.business.ui.views package.

@Route(value = "my-view", layout = MainLayout.class)
@PageTitle("My View")
public class MyView extends ViewFrame {

  public MyView() {
    // Header
    Label title = new Label("Title");

    Button print = new Button(new Icon(VaadinIcon.PRINT));
    Button external = new Button(new Icon(VaadinIcon.EXTERNAL_LINK));

    HorizontalLayout header = new HorizontalLayout(title, print, external);
    header.setAlignItems(FlexComponent.Alignment.CENTER);
    header.setFlexGrow(1, title);
    header.setPadding(true);
    header.setSpacing(true);

    setViewHeader(header);

    // Content
    Paragraph text = new Paragraph("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.");

    VerticalLayout content = new VerticalLayout(text);
    content.setPadding(true);

    setViewContent(content);

    // Footer
    Button reply = new Button("Reply", new Icon(VaadinIcon.REPLY));
    Button replyAll = new Button("Reply All", new Icon(VaadinIcon.REPLY_ALL));
    Button forward = new Button("Forward", new Icon(VaadinIcon.FORWARD));

    HorizontalLayout footer = new HorizontalLayout(reply, replyAll, forward);
    footer.setPadding(true);
    footer.setSpacing(true);

    setViewFooter(footer);
  }
}

If we wanted to distinguish the slots from one another, we could utilise some of the styles that the Business App Starter provides, e.g. borders and shadows.

Borders

To apply borders to any Component call addClassName(BoxShadowBorders.<DIRECTION>). Adding a bottom and top border on the header and footer respectively:

header.addClassName(BoxShadowBorders.BOTTOM);
footer.addClassName(BoxShadowBorders.TOP);

Shadows

Applying shadows using addClassName:

header.addClassName(LumoStyles.Shadow.S);
footer.addClassName(LumoStyles.Shadow.S);

Alternatively you can use the UIUtils utility class:

UIUtils.setShadow(Shadow.S, header, footer);

Background Color

You can also change the background color on the server-side using UIUtils.

UIUtils.setBackgroundColor(LumoStyles.Color.BASE_COLOR, header, footer);

For more information on how to theme your application using the various Business App Starter utilities please see Theming.